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操作日期和时间的方法
Mar 11 Python
编写Python脚本批量下载DesktopNexus壁纸的教程
May 06 Python
python结合opencv实现人脸检测与跟踪
Jun 08 Python
Python实现TCP/IP协议下的端口转发及重定向示例
Jun 14 Python
深入理解 Python 中的多线程 新手必看
Nov 20 Python
python处理csv数据动态显示曲线实例代码
Jan 23 Python
详解Python3 pickle模块用法
Sep 16 Python
Pytorch 实现sobel算子的卷积操作详解
Jan 10 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
Feb 27 Python
Python应用实现双指数函数及拟合代码实例
Jun 19 Python
Python根据字典的值查询出对应的键的方法
Sep 30 Python
python如何实现word批量转HTML
Sep 30 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
PHPWind 发帖回帖Api PHP版打包下载
2010/02/08 PHP
php 变量未定义等错误的解决方法
2011/01/12 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
12306 刷票脚本及稳固刷票脚本(防挂)
2017/01/04 Javascript
vue2.0 自定义日期时间过滤器
2017/06/07 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
vue-cli2 构建速度优化的实现方法
2019/01/08 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
vue 使用vant插件做tabs切换和无限加载功能的实现
2020/11/04 Javascript
[02:28]PWL开团时刻DAY3——Ink Ice与DeMonsTer之间的勾心斗角
2020/11/03 DOTA
用Python的Flask框架结合MySQL写一个内存监控程序
2015/11/07 Python
python函数的5种参数详解
2017/02/24 Python
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
使用Python如何测试InnoDB与MyISAM的读写性能
2018/09/18 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解
2020/06/03 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
.NET笔试题(20个问题)
2016/02/02 面试题
大三毕业自我鉴定
2014/01/15 职场文书
一次性工伤赔偿协议书范本
2014/11/25 职场文书
实习单位意见
2015/06/04 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
Oracle数据库中通用的函数实例详解
2022/03/25 Oracle
virtualenv隔离Python环境的问题解析
2022/06/21 Python