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动态监控日志内容的示例
Feb 16 Python
Python urls.py的三种配置写法实例详解
Apr 28 Python
Python中使用Counter进行字典创建以及key数量统计的方法
Jul 06 Python
Python爬取个人微信朋友信息操作示例
Aug 03 Python
python 读取竖线分隔符的文本方法
Dec 20 Python
解决python字典对值(值为列表)赋值出现重复的问题
Jan 20 Python
python获取微信企业号打卡数据并生成windows计划任务
Apr 30 Python
让Python脚本暂停执行的几种方法(小结)
Jul 11 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
Aug 13 Python
获取Pytorch中间某一层权重或者特征的例子
Aug 17 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
Jan 18 Python
Python如何给函数库增加日志功能
Aug 04 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学习笔记之三 数据库基本操作
2011/01/17 PHP
php中strtotime函数用法详解
2014/11/15 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
php中bind_param()函数用法分析
2017/03/28 PHP
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2013/10/24 Javascript
JavaScript中定义函数的三种方法
2015/03/12 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
jquery动态遍历Json对象的属性和值的方法
2016/07/27 Javascript
JS实现购物车特效
2017/02/02 Javascript
JS数组去重(4种方法)
2017/03/27 Javascript
jstree单选功能的实现方法
2017/06/07 Javascript
jQuery实现节点的追加、替换、删除、复制功能示例
2017/07/11 jQuery
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
Vue 实例中使用$refs的注意事项
2021/01/29 Vue.js
[01:09:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第一场 6.2
2018/06/04 DOTA
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
2018/06/01 Python
numpy matrix和array的乘和加实例
2018/06/28 Python
对python sklearn one-hot编码详解
2018/07/10 Python
Python3 修改默认环境的方法
2019/02/16 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
Python OpenCV调用摄像头检测人脸并截图
2020/08/20 Python
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
事业单位请假制度
2014/01/13 职场文书
我的梦想演讲稿
2014/04/30 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
2014年教师德育工作总结
2014/11/10 职场文书
五年级上册复习计划
2015/01/19 职场文书
办公用品管理制度
2015/08/04 职场文书
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android
Golang Web 框架Iris安装部署
2022/08/14 Python