python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
使用python爬虫库requests,urllib爬取今日头条街拍美图
代码均有注释
importre,json,requests,os
fromhashlibimportmd5
fromurllib.parseimporturlencode
fromrequests.exceptionsimportRequestException
frombs4importBeautifulSoup
frommultiprocessingimportPool
#请求索引页
defget_page_index(offset,keyword):
#传送的数据
data={
'offset':offset,
'format':'json',
'keyword':keyword,
'autoload':'true',
'count':'20',
'cur_tab':1
}
#自动编码为服务器可识别的url
url="https://www.toutiao.com/search_content/?"+urlencode(data)
#异常处理
try:
#获取返回的网页
response=requests.get(url)
#判断网页的状态码是否正常获取
ifresponse.status_code==200:
#返回解码后的网页
returnresponse.text
#不正常获取,返回None
returnNone
exceptRequestException:
#提示信息
print("请求索引页出错")
returnNone
#解析请求的索引网页数据
defparse_page_index(html):
#json加载转换
data=json.loads(html)
#数据为真,并且data键值存在与数据中
ifdataand'data'indata.keys():
#遍历返回图集所在的url
foritemindata.get('data'):
yielditem.get('article_url')
#图集详情页请求
defget_page_detail(url):
#设置UA,模拟浏览器正常访问
head={
'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/63.0.3239.132Safari/537.36'}
#异常处理
try:
response=requests.get(url,headers=head)
ifresponse.status_code==200:
returnresponse.text
returnNone
exceptRequestException:
print("请求详情页出错")
returnNone
#解析图集详情页的数据
defparse_page_detail(html,url):
#异常处理
try:
#格式转换与图集标题提取
soup=BeautifulSoup(html,'lxml')
title=soup.select('title')[0].get_text()
print(title)
#正则查找图集链接
image_pattern=re.compile('gallery:(.*?),\n',re.S)
result=re.search(image_pattern,html)
ifresult:
#数据的优化
result=result.group(1)
result=result[12:]
result=result[:-2]
#替换
result=re.sub(r'\\','',result)
#json加载
data=json.loads(result)
#判断数据不为空,并确保sub——images在其中
ifdataand'sub_images'indata.keys():
#sub_images数据提取
sub_images=data.get('sub_images')
#列表数据提取
images=[item.get('url')foriteminsub_images]
#图片下载
forimageinimages:download_images(image)
#返回字典
return{
'title':title,
'url':url,
'images':images
}
exceptException:
pass
#图片url请求
defdownload_images(url):
#提示信息
print('正在下载',url)
#浏览器模拟
head={
'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/63.0.3239.132Safari/537.36'}
#异常处理
try:
response=requests.get(url,headers=head)
ifresponse.status_code==200:
#图片保存
save_image(response.content)
returnNone
exceptRequestException:
print("请求图片出错")
returnNone
#图片保存
defsave_image(content):
#判断文件夹是否存在,不存在则创建
if'街拍'notinos.listdir():
os.makedirs('街拍')
#设置写入文件所在文件夹位置
os.chdir('E:\python写网路爬虫\CSDN爬虫学习\街拍')
#路径,名称,后缀
file_path='{0}/{1}.{2}'.format(os.getcwd(),md5(content).hexdigest(),'jpg')
#图片保存
withopen(file_path,'wb')asf:
f.write(content)
f.close()
#主函数
defmian(offset):
#网页获取
html=get_page_index(offset,'街拍')
#图集url
forurlinparse_page_index(html):
ifurl!=None:
#图集网页详情
html=get_page_detail(url)
#图集内容
result=parse_page_detail(html,url)
if__name__=='__main__':
#创建访问的列表(0-9)页
group=[i*10foriinrange(10)]
#创建多线程进程池
pool=Pool()
#进程池启动,传入的数据
pool.map(mian,group)
爬取图片如下
本文主要讲解了python爬虫库requests、urllib与OS模块结合使用爬取今日头条搜索内容的实例,更多关于python爬虫相关知识请查看下面的相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。