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爬虫爬验证码实现功能详解
Apr 14 Python
Python3使用requests登录人人影视网站的方法
May 11 Python
Python操作json的方法实例分析
Dec 06 Python
python写入文件自动换行问题的方法
Jul 05 Python
python 含子图的gif生成时内存溢出的方法
Jul 07 Python
Django 大文件下载实现过程解析
Aug 01 Python
python内置模块collections知识点总结
Dec 19 Python
如何利用Python matplotlib绘制雷达图
Dec 21 Python
浅谈Selenium+Webdriver 常用的元素定位方式
Jan 13 Python
python基础之匿名函数详解
Apr 21 Python
聊一聊python常用的编程模块
May 14 Python
Python 避免字典和元组的多重嵌套问题
Jul 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后台程序与Javascript的两种交互方式
2009/10/25 PHP
PHP生成随机用户名和密码的实现代码
2013/02/27 PHP
php弹出对话框实现重定向代码
2014/01/23 PHP
php实现读取内存顺序号
2015/03/29 PHP
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
JavaScript中的slice()方法使用详解
2015/06/06 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
关于JavaScript作用域你想知道的一切
2016/02/04 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
微信小程序 window_x64环境搭建
2016/09/30 Javascript
vue.js选中动态绑定的radio的指定项
2017/06/02 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
2018/01/13 Javascript
[09:43]DOTA2每周TOP10 精彩击杀集锦vol.5
2014/06/25 DOTA
[03:01]2014DOTA2国际邀请赛 DC:我是核弹粉,为Burning和国土祝福
2014/07/13 DOTA
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
[01:02:02]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第二局
2016/02/25 DOTA
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
Python实现高效求解素数代码实例
2015/06/30 Python
Django 导出项目依赖库到 requirements.txt过程解析
2019/08/23 Python
python UDF 实现对csv批量md5加密操作
2021/01/01 Python
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
售后服务科岗位职责范文
2013/11/13 职场文书
金融专业大学生自我评价
2014/01/09 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
美术教学感言
2014/02/22 职场文书
《三峡》教学反思
2014/03/01 职场文书
2014年公司庆元旦活动方案
2014/03/05 职场文书
公休请假条
2014/04/11 职场文书
催款律师函范文
2015/05/27 职场文书
有关花店创业的计划书模板
2019/08/27 职场文书
导游词之台湾阿里山
2019/10/23 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS
详解Js模块化的作用原理和方案
2021/04/29 Javascript
教你用Java Swing实现自助取款机系统
2021/06/11 Java/Android