python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例

作者:jia666666 时间:2022-01-05 19:39:44 

使用python爬虫库requests,urllib爬取今日头条街拍美图

代码均有注释


import re,json,requests,os
from hashlib import md5
from urllib.parse import urlencode
from requests.exceptions import RequestException
from bs4 import BeautifulSoup
from multiprocessing import Pool
#请求索引页
def get_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)
   #判断网页的状态码是否正常获取
   if response.status_code==200:
     #返回解码后的网页
     return response.text
   #不正常获取,返回None
   return None
 except RequestException:
   #提示信息
   print("请求索引页出错")
   return None
#解析请求的索引网页数据
def parse_page_index(html):
 #json加载转换
 data=json.loads(html)
 #数据为真,并且data键值存在与数据中
 if data and 'data' in data.keys():
   #遍历返回图集所在的url
   for item in data.get('data'):
     yield item.get('article_url')
#图集详情页请求
def get_page_detail(url):
 #设置UA,模拟浏览器正常访问
 head = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
 #异常处理
 try:
   response=requests.get(url,headers=head)
   if response.status_code==200:
     return response.text
   return None
 except RequestException:
   print("请求详情页出错")
   return None
#解析图集详情页的数据
def parse_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)
   if result:
     #数据的优化
     result=result.group(1)
     result = result[12:]
     result = result[:-2]
     #替换
     result = re.sub(r'\\', '', result)
     #json加载
     data = json.loads(result)
     #判断数据不为空,并确保sub——images在其中
     if data and 'sub_images' in data.keys():
       #sub_images数据提取
       sub_images=data.get('sub_images')
       #列表数据提取
       images=[item.get('url') for item in sub_images]
       #图片下载
       for image in images:download_images(image)
       #返回字典
       return {
         'title':title,
         'url':url,
         'images':images
       }
 except Exception:
   pass
#图片url请求
def download_images(url):
 #提示信息
 print('正在下载',url)
 #浏览器模拟
 head = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
 #异常处理
 try:
   response = requests.get(url, headers=head)
   if response.status_code == 200:
     #图片保存
     save_image(response.content)
   return None
 except RequestException:
   print("请求图片出错")
   return None
#图片保存
def save_image(content):
 #判断文件夹是否存在,不存在则创建
 if '街拍' not in os.listdir():
   os.makedirs('街拍')
 #设置写入文件所在文件夹位置
 os.chdir('E:\python写网路爬虫\CSDN爬虫学习\街拍')
 #路径,名称,后缀
 file_path='{0}/{1}.{2}'.format(os.getcwd(),md5(content).hexdigest(),'jpg')
 #图片保存
 with open(file_path,'wb') as f:
     f.write(content)
     f.close()
#主函数
def mian(offset):
 #网页获取
 html=get_page_index(offset,'街拍')
 #图集url
 for url in parse_page_index(html):
   if url!=None:
     #图集网页详情
     html=get_page_detail(url)
     #图集内容
     result=parse_page_detail(html,url)
if __name__ == '__main__':
 #创建访问的列表(0-9)页
 group=[i*10 for i in range(10)]
 #创建多线程进程池
 pool=Pool()
 #进程池启动,传入的数据
 pool.map(mian,group)

爬取图片如下

python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例

本文主要讲解了python爬虫库requests、urllib与OS模块结合使用爬取今日头条搜索内容的实例,更多关于python爬虫相关知识请查看下面的相关链接

来源:https://blog.csdn.net/jia666666/article/details/82154253

标签:python,爬虫requests,urllib
0
投稿

猜你喜欢

  • python 统计代码行数简单实例

    2022-05-08 21:04:34
  • python通过百度地图API获取某地址的经纬度详解

    2021-11-06 12:14:45
  • 多个版本的python共存时使用pip的正确做法

    2021-06-24 10:41:17
  • Pygame Transform图像变形的实现示例

    2022-03-04 03:39:29
  • python3实现ftp服务功能(客户端)

    2023-05-28 00:36:31
  • 使用jQuery简化Ajax开发

    2010-04-11 21:09:00
  • 详解python使用canvas实现移动并绑定键盘

    2022-08-18 01:02:52
  • 基于python实现垂直爬虫系统的方法详解

    2023-11-17 13:33:38
  • 天极产品设计流程

    2007-10-11 18:47:00
  • 用VB将ASP代码封装成DLL

    2007-09-28 12:46:00
  • golang中select语句的简单实例

    2023-09-03 03:01:28
  • python进程管理工具supervisor的安装与使用教程

    2023-10-15 20:41:57
  • OpenCV-Python实现图像梯度与Sobel滤波器

    2021-04-07 05:23:20
  • WEB2.0网页制作标准教程(7)CSS学习入门

    2007-12-13 13:12:00
  • Python WXPY实现微信监控报警功能的代码

    2021-05-15 02:07:20
  • python reduce 函数使用详解

    2022-11-01 22:20:57
  • 浅析python 定时拆分备份 nginx 日志的方法

    2023-08-04 06:03:37
  • 艺术和设计之间的差别

    2010-11-17 19:28:00
  • 怎样处理 MySQL中与文件许可有关的问题

    2008-11-27 16:12:00
  • Pandas对数值进行分箱操作的4种方法总结

    2023-08-09 02:52:04
  • asp之家 网络编程 m.aspxhome.com