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 相关文章推荐
用map函数来完成Python并行任务的简单示例
Apr 02 Python
Python字符串处理函数简明总结
Apr 13 Python
python中list常用操作实例详解
Jun 03 Python
python脚本内运行linux命令的方法
Jul 02 Python
python用装饰器自动注册Tornado路由详解
Feb 14 Python
Python实现Logger打印功能的方法详解
Sep 01 Python
python实现word 2007文档转换为pdf文件
Mar 15 Python
用Python实现大文本文件切割的方法
Jan 12 Python
Python大数据之从网页上爬取数据的方法详解
Nov 16 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
Apr 29 Python
关于Keras Dense层整理
May 21 Python
Python使用pandas导入csv文件内容的示例代码
Dec 24 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 超级全局变量相关总结
2020/06/30 PHP
JavaScript事件委托用法分析
2015/01/24 Javascript
JS如何实现文本框随文本的长度而增长
2015/07/30 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
2017/05/03 Javascript
基于JavaScript实现抽奖系统
2018/01/16 Javascript
vue生命周期和react生命周期对比【推荐】
2018/09/19 Javascript
Vue组件系列开发之模态框
2019/04/18 Javascript
微信小程序开发实现消息推送
2020/11/18 Javascript
七行JSON代码把你的网站变成移动应用过程详解
2019/07/09 Javascript
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
[56:21]LGD vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python制作刷网页流量工具
2017/04/23 Python
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
python出现"IndentationError: unexpected indent"错误解决办法
2017/10/15 Python
基于python神经卷积网络的人脸识别
2018/05/24 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
使用PM2+nginx部署python项目的方法示例
2018/11/07 Python
Django分页功能的实现代码详解
2019/07/29 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
python如何编写类似nmap的扫描工具
2020/11/06 Python
Python爬虫破解登陆哔哩哔哩的方法
2020/11/17 Python
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
字中字效果的实现【html5实例】
2016/05/03 HTML / CSS
Osklen官方在线商店:巴西服装品牌
2019/04/25 全球购物
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
卫校毕业生自我鉴定
2013/10/31 职场文书
个人自荐信
2013/12/05 职场文书
老公爱的承诺书
2014/03/31 职场文书
2015年秋季小班开学寄语
2015/05/27 职场文书
幼儿园六一主持词开场白
2015/05/28 职场文书
摩登时代观后感
2015/06/03 职场文书
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle