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 07 Python
python实现的文件夹清理程序分享
Nov 22 Python
Python的socket模块源码中的一些实现要点分析
Jun 06 Python
python tensorflow基于cnn实现手写数字识别
Jan 01 Python
Python 获得命令行参数的方法(推荐)
Jan 24 Python
pandas DataFrame创建方法的方式
Aug 02 Python
命令行运行Python脚本时传入参数的三种方式详解
Oct 11 Python
pycharm运行程序时看不到任何结果显示的解决
Feb 21 Python
解决django 向mysql中写入中文字符出错的问题
May 18 Python
python框架flask入门之环境搭建及开启调试
Jun 07 Python
最新Python idle下载、安装与使用教程图文详解
Nov 28 Python
python脚本定时发送邮件
Dec 22 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+mysql写的留言本
2006/10/09 PHP
PHP+MySQL5.0中文乱码解决方法
2006/11/20 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
2012/07/02 PHP
PHP附件下载中文名称乱码的解决方法
2015/12/17 PHP
前端必学之PHP语法基础
2016/01/01 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
2017/04/18 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
php 函数中静态变量使用的问题实例分析
2020/03/05 PHP
js实现杯子倒水问题自动求解程序
2013/03/25 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
2013/10/29 Javascript
javascript中的undefined和not defined区别示例介绍
2014/02/26 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
javascript实现漂亮的拖动层,窗口拖拽特效
2015/04/24 Javascript
JS实现可调整倒计时间代码分享
2015/08/18 Javascript
nodejs修复ipa处理过的png图片
2016/02/17 NodeJs
使用nodejs下载风景壁纸
2017/02/05 NodeJs
vue基于Vue2.0和高德地图的地图组件实例
2017/04/28 Javascript
基于JavaScript中字符串的match与replace方法(详解)
2017/12/04 Javascript
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
js中数组常用方法总结(推荐)
2019/04/09 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
2019/08/16 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
Python 模板引擎的注入问题分析
2017/01/01 Python
详解如何修改python中字典的键和值
2020/09/29 Python
HTML5逐步分析实现拖放功能的方法
2020/09/30 HTML / CSS
美国电视购物HSN官网:HSN
2016/09/07 全球购物
我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
2014/03/30 面试题
毕业生找工作推荐信
2013/11/21 职场文书
服装设计专业自荐信
2014/06/17 职场文书
教师演讲稿开场白
2014/08/25 职场文书