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解释器理解Python中的字节码
Apr 01 Python
Python的SQLAlchemy框架使用入门
Apr 29 Python
详解Python中for循环的使用方法
May 14 Python
Python实现字典依据value排序
Feb 24 Python
python中利用await关键字如何等待Future对象完成详解
Sep 07 Python
Python 函数基础知识汇总
Mar 09 Python
Python线程同步的实现代码
Oct 03 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
Feb 21 Python
利用Python脚本实现自动刷网课
Feb 03 Python
jupyter notebook 的工作空间设置操作
Apr 20 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
Apr 22 Python
python自定义函数def的应用详解
Jun 03 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
如何去掉文章里的 html 语法
2006/10/09 PHP
php部分常见问题总结
2008/03/27 PHP
在PHP中使用反射技术的架构插件使用说明
2010/05/18 PHP
C#静态方法与非静态方法实例分析
2014/09/22 PHP
6个超实用的PHP代码片段
2015/08/10 PHP
PHP PDOStatement::nextRowset讲解
2019/02/01 PHP
capacityFixed 基于jquery的类似于新浪微博新消息提示的定位框
2011/05/24 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
2013/04/09 Javascript
js控制的遮罩层实例介绍
2013/05/29 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
js实现有时间限制消失的图片方法
2015/02/27 Javascript
js实现图片轮播效果
2015/12/19 Javascript
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
微信小程序中使用echarts的实现方法
2019/04/24 Javascript
Vue数据双向绑定底层实现原理
2019/11/22 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
[05:06]TI4西雅图DOTA2前线报道 海涛密探LGD训练
2014/07/09 DOTA
pyramid配置session的方法教程
2013/11/27 Python
Python中利用函数装饰器实现备忘功能
2015/03/30 Python
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
python 实现自动远程登陆scp文件实例代码
2017/03/13 Python
python+selenium实现简历自动刷新的示例代码
2019/05/20 Python
wxPython绘图模块wxPyPlot实现数据可视化
2019/11/19 Python
Python 实现微信自动回复的方法
2020/09/11 Python
Python对excel的基本操作方法
2021/02/18 Python
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
《蚕姑娘》教学反思
2014/04/15 职场文书
安全负责人任命书
2014/06/06 职场文书
敬老院献爱心活动总结
2014/07/08 职场文书
2015年班干部工作总结
2015/04/29 职场文书
ConstraintValidator类如何实现自定义注解校验前端传参
2021/06/18 Java/Android
javascript Number 与 Math对象的介绍
2021/11/17 Javascript
浅析Python OpenCV三种滤镜效果
2022/04/11 Python