首页 > 技术文章 > 简单爬虫

suixi 2019-07-22 18:48 原文

day 07 爬虫

爬虫爬到的视频和图片会下载下来
#字典赋值
#1 title_content_dic[title_res[i]]=content_res[i]
#2 title_content_desc_dic[title]=(content,desc)
#需要引入requests库,则需要安装
爬取网页的全部内容
import requests
import re
response=requests.get("http://duanziwang.com/")#模拟浏览器打开网页
data=response.text
print(data)
# .匹配所有字符,*表示前面的字符0到无穷个
res=re.findall('<p>(.*?)</p>',data)
print(res)
标题和内容对应的第一种方法
import requests
import re
response=requests.get('http://ishuo.cn/')#模拟浏览器打开网页
data=response.text
####标题和内容对应的第一种方法
content_res = re.findall('<div class="content">(.*?)</div>', data)
title_res = re.findall('<a href="/subject/.*?">(.*?)</a>', data)##注意这里面的第一个.*?
# print(title_res.index('活得糊涂的人,容易幸福'))#index可以获得'活得糊涂的人,容易幸福'的索引值
title_res=title_res[10:60]

title_content_dic={}#定义空字典
for i in range(len(title_res)):
    title_content_dic[title_res[i]]=content_res[i]

for i in title_content_dic.items():
    print(f'{i[0]:<40} || {i[1]:<100}')
标题和内容对应的第二种方法
import requests
import re
response=requests.get('http://ishuo.cn/')
data=response.text
####标题和内容对应的第二种方法
res=re.findall('<li class="list_li">(.*?)</li>',data)#这句中的data是指在data中取值

title_content_desc_dic={}
for i in res:
    content=re.findall('<div class="content">(.*?)</div>',i)[0]#这句中的i是指在i中取值
    title=re.findall('<a href="/subject/.*?">(.*?)</a>',i)[0]
    desc=re.findall('</a>(04月.*?)</div>',i)[0]

    title_content_desc_dic[title]=(content,desc)

for i in title_content_desc_dic.items():
    print(f'{i[0]:<60} || {i[1]}')
爬取图片
import requests
import re
response=requests.get('http://www.nipic.com/design/acg/renwu/index.html?page=1&tdsourcetag=s_pcqq_aiomsg')
data=response.text

img_url_res=re.findall('data-src="(.*?)"',data)

for i in img_url_res:

    img_response=requests.get(i)
    img_data=img_response.content
###上面的二步是图片比文字多出的部分
    img_name=i.split("/")[-1]
##获取图片在网页中的名字

    f=open(img_name,"wb")
    f.write(img_data)
    f.flush()  # 快速刷新可写可不写

i s h u o爬取

import  requests
import re
response=requests.get("http://ishuo.cn/") # 模拟浏览器打开网页
# print(response.status_code)  # 200成功,301,404网页丢失
# print(response.encoding)  # utf-8
data=response.text
#print(data)
res=re.findall('<div class="content">(.*?)</div>',data)

for i in res:#type:str
    if i.startswith("<ul>"):
        continue
    print(i+"\n")

视频爬取

import requests
import re

response = requests.get('http://www.mod.gov.cn/v/index.htm')
# response.encoding = 'utf8'
data = response.text
# print(data)

# mp4_res1 = re.findall('<a href="(.*?)"  class="img">',data)
# for i in mp4_res1:
#     print(i)


mp4_res2 = re.findall('<a href="(.*?)">', data)


for i in mp4_res2:  # type:str
    res = re.findall('(.*?htm)', i)[0]
    print(res)
    res = 'http://www.mod.gov.cn/v/' + res

    response = requests.get(res)
    data = response.text
    # http://vv.chinamil.com.cn/asset/category3/2019/06/27/asset_357593.mp4
    url_res = re.findall('//Video (.*?.mp4)',data)[0]


    mp4_response = requests.get(url_res)
    mp4_data = mp4_response.content
    f = open('test.mp4','wb')
    f.write(mp4_data)
    # break

'''
<a href="2019-07/20/content_4846213.htm" class="img"><img src="attachement/jpg/site21/20190720/6c4b9041ab8b1e9ca1be01.jpg" border="0"><em class="video_40x40"></em></a>
'''

推荐阅读