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


Posted in Python onMarch 10, 2020

使用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爬虫相关知识请查看下面的相关链接

Python 相关文章推荐
利用Python找出序列中出现最多的元素示例代码
Dec 08 Python
Python3导入自定义模块的三种方法详解
Apr 13 Python
Python并行分布式框架Celery详解
Oct 15 Python
Django如何实现上传图片功能
Aug 16 Python
Python的条件锁与事件共享详解
Sep 12 Python
使用python写一个自动浏览文章的脚本实例
Dec 05 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
Feb 22 Python
jupyter notebook的安装与使用详解
May 18 Python
python如何建立全零数组
Jul 19 Python
在Python中字典按值排序的实现方法
Nov 12 Python
python UIAutomator2使用超详细教程
Feb 19 Python
python 多态 协议 鸭子类型详解
Nov 27 Python
python+gdal+遥感图像拼接(mosaic)的实例
Mar 10 #Python
python获取栅格点和面值的实现
Mar 10 #Python
Python列表切片常用操作实例解析
Mar 10 #Python
Python numpy多维数组实现原理详解
Mar 10 #Python
python中使用you-get库批量在线下载bilibili视频的教程
Mar 10 #Python
Python字符串hashlib加密模块使用案例
Mar 10 #Python
Python中求对数方法总结
Mar 10 #Python
You might like
php 多个submit提交表单 处理方法
2009/07/07 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
2013/06/13 PHP
PHP将字符分解为多个字符串的方法
2014/11/22 PHP
改进UCHOME的记录发布,增强可访问性用户体验
2011/01/17 Javascript
js模拟点击事件实现代码
2012/11/06 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
js获取css的各种样式并且设置他们的方法
2017/08/22 Javascript
微信小程序之选项卡的实现方法
2017/09/29 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
微信小程序音乐播放器开发
2019/11/20 Javascript
[01:29:17]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
Python模块学习 datetime介绍
2012/08/27 Python
跟老齐学Python之玩转字符串(2)
2014/09/14 Python
python实现通过shelve修改对象实例
2014/09/26 Python
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
python+opencv实现霍夫变换检测直线
2020/10/23 Python
Python WEB应用部署的实现方法
2019/01/02 Python
python opencv判断图像是否为空的实例
2019/01/26 Python
Python之时间和日期使用小结
2019/02/14 Python
利用Python实现微信找房机器人实例教程
2019/03/10 Python
pyqt 多窗口之间的相互调用方法
2019/06/19 Python
python实现canny边缘检测
2020/09/14 Python
碧欧泉美国官网:Biotherm美国
2016/08/31 全球购物
倩碧澳大利亚官网:Clinique澳大利亚
2019/07/22 全球购物
环境科学专业求职信
2014/08/04 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书
城南旧事电影观后感
2015/06/16 职场文书
2015年校医个人工作总结
2015/07/24 职场文书
机关干部正风肃纪心得体会
2016/01/15 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书