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中AND、OR的一个使用小技巧
Feb 18 Python
使用Python程序抓取新浪在国内的所有IP的教程
May 04 Python
python Django框架实现自定义表单提交
Mar 25 Python
Python操作Redis之设置key的过期时间实例代码
Jan 25 Python
基于python批量处理dat文件及科学计算方法详解
May 08 Python
Python中if elif else及缩进的使用简述
May 31 Python
centos 安装Python3 及对应的pip教程详解
Jun 28 Python
浅谈Python访问MySQL的正确姿势
Jan 07 Python
Python count函数使用方法实例解析
Mar 23 Python
Python中过滤字符串列表的方法
Dec 22 Python
python 自动识别并连接串口的实现
Jan 19 Python
七个非常实用的Python工具包总结
Jun 15 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 验证码(倾斜,正弦干扰线,黏贴,旋转)
2013/06/29 PHP
Yii2创建控制器(createController)方法详解
2016/07/23 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
2019/10/30 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
2020/04/26 PHP
js写一个弹出层并锁屏效果实现代码
2012/12/07 Javascript
jQuery登陆判断简单实现代码
2013/04/21 Javascript
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
20个实用的JavaScript技巧分享
2014/11/28 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
Bootstrap table使用方法汇总
2017/11/17 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
python读文件保存到字典,修改字典并写入新文件的实例
2018/04/23 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
2018/05/30 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
python读取Excel实例详解
2018/08/17 Python
利用python循环创建多个文件的方法
2018/10/25 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
利用python list完成最简单的DB连接池方法
2019/08/09 Python
python字典排序的方法
2019/10/12 Python
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
初中女生自我鉴定
2013/12/19 职场文书
班级道德讲堂实施方案
2014/02/24 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
国际贸易毕业生求职信
2014/07/20 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
2015年环卫工作总结
2015/04/28 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
使用javascript解析二维码的三种方式
2021/11/11 Javascript
德劲DE1102数字调谐收音机机评
2022/04/07 无线电