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批量给云主机配置安全组的方法教程
Jun 21 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
Sep 30 Python
Python实现将doc转化pdf格式文档的方法
Jan 19 Python
python通过elixir包操作mysql数据库实例代码
Jan 31 Python
python中的字符串内部换行方法
Jul 19 Python
python变量的存储原理详解
Jul 10 Python
python3.x提取中文的正则表达式示例代码
Jul 23 Python
PyTorch中的Variable变量详解
Jan 07 Python
Python + selenium + crontab实现每日定时自动打卡功能
Mar 31 Python
更新升级python和pip版本后不生效的问题解决
Apr 17 Python
tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T
Jun 22 Python
Pandas加速代码之避免使用for循环
May 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
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
PHPExcel导出2003和2007的excel文档功能示例
2017/01/04 PHP
使用JQuery进行跨域请求
2010/01/25 Javascript
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
2017/12/14 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
通过webpack引入第三方库的方法
2018/07/20 Javascript
用npm安装vue和vue-cli,并使用webpack创建项目的方法
2018/09/28 Javascript
JavaScript中将值转换为字符串的五种方法总结
2019/06/06 Javascript
Vue多环境代理配置方法思路详解
2019/06/21 Javascript
VUEX采坑之路之获取不到$store的解决方法
2019/11/08 Javascript
jquery实现商品sku多属性选择功能(商品详情页)
2019/12/20 jQuery
详解vue 组件注册
2020/11/20 Vue.js
Python中__name__的使用实例
2015/04/14 Python
python实现逻辑回归的方法示例
2017/05/02 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2018/06/28 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
Python flask框架post接口调用示例
2019/07/03 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
Django import export实现数据库导入导出方式
2020/04/03 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
兰蔻俄罗斯官方网站:Lancome俄罗斯
2019/12/09 全球购物
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
幼教简历自我评价
2014/01/28 职场文书
十八届三中全会个人学习材料
2014/02/13 职场文书
应届生自荐信范文
2014/02/21 职场文书
毕业留言寄语大全
2014/04/10 职场文书
村党支部公开承诺书
2014/05/29 职场文书
服务宗旨标语
2014/07/01 职场文书
优秀本科毕业生自荐信
2014/07/04 职场文书