python多线程爬取-今日头条的街拍数据(附源码加思路注释)

  这里用的是json+re+requests+beautifulsoup+多线程

1 import json
  2 import re
  3 from multiprocessing.pool import Pool
  4
  5 import requests
  6 from bs4 import BeautifulSoup
  7 from config import *
  8 from requests import RequestException
  9
 10
 11 def get_page_index(offset, keyword):
 12     ‘‘‘得到一个页面的索引‘‘‘
 13     data = {
 14         ‘offset‘: offset,
 15         ‘format‘: ‘json‘,
 16         ‘keyword‘: keyword,
 17         ‘autoload‘: ‘true‘,
 18         ‘count‘: ‘20‘,
 19         ‘cur_tab‘: ‘1‘,
 20         ‘from‘: ‘search_tab‘
 21     }
 22     # 请求方式一
 23     # url = ‘https://www.toutiao.com/search_content/?‘+urlencode(data)
 24     # response = requests.get(url)
 25
 26     # 请求方式二
 27     url = ‘https://www.toutiao.com/search_content/‘
 28     try:
 29         response = requests.get(url, params=data)
 30         if response.status_code == 200:
 31             return response.text
 32         return None
 33     except RequestException:
 34         return None
 35
 36
 37 def parse_page_index(html):
 38     ‘‘‘解析json数据‘‘‘
 39     data = json.loads(html)
 40     if data and ‘data‘ in data.keys():
 41         for item in data.get(‘data‘):
 42             yield item.get(‘article_url‘)
 43
 44
 45 def get_page_detail(url):
 46     ‘‘‘得到详情页的数据‘‘‘
 47     # 添加的请求头
 48     headers = {
 49         ‘user-agent‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36‘,
 50     }
 51     try:
 52         response = requests.get(url, headers=headers)
 53         if response.status_code == 200:
 54             return response.text
 55         return None
 56     except RequestException:
 57         return None
 58
 59
 60 def parse_page_detail(html, url):
 61     ‘‘‘解析详情页数据‘‘‘
 62     soup = BeautifulSoup(html, ‘lxml‘)
 63     t = soup.select(‘title‘)
 64     for i in t:
 65         title = i.get_text()
 66
 67     pattern = re.compile(‘gallery: JSON.parse\("(.*?)"\),‘, re.S)
 68     result = re.search(pattern, html)
 69     if result:
 70
 71         # print(result.group(1))
 72         d = re.sub(‘\\\\‘, ‘‘, result.group(1))
 73         # print(d)
 74         data = json.loads(d)
 75         if data:
 76             images = [item.get(‘url‘) for item in data.get(‘sub_images‘)]
 77             for image in images:
 78                 download_image(image, title)
 79             return {
 80                 ‘title‘: title,
 81                 ‘url‘: url,
 82                 ‘images‘: images
 83             }
 84     else:
 85         None
 86
 87
 88 def download_image(url, title):
 89     ‘‘‘
 90     图片下载
 91     :param url: 下载的连接
 92     :return:
 93     ‘‘‘
 94     print(‘正在下载‘, url)
 95     try:
 96         response = requests.get(url)
 97         if response.status_code == 200:
 98             content = response.content
 99             save_to_image(content, title)
100         return None
101     except RequestException:
102         return None
103
104
105 count = 0
106
107
108 def save_to_image(content, title):
109     global count
110     ‘‘‘
111     保存图片文件
112     :param content: 图片文件的内容
113     :return:
114     ‘‘‘
115     name = title + str(count)
116     file_path = ‘./头条/{}.{}‘.format(name, ‘jpg‘)
117     with open(file_path, ‘wb‘) as f:
118         count += 1
119         f.write(content)
120
121
122 def main(offset):
123     ‘‘‘主程序入口‘‘‘
124     html = get_page_index(offset, ‘街拍‘)
125
126     # print(html)
127     for url in parse_page_index(html):
128
129         if url:
130             # print(url)
131             html = get_page_detail(url)
132             if html:
133                 # print(parse_page_detail(html, url))
134                 result = parse_page_detail(html, url)
135                 if result:
136                     print(result)
137                     # save_to_mongo(result)
138
139
140 GROUP_START = 1
141 GROUP_END = 20
142 if __name__ == ‘__main__‘:
143     groups = [i * 20 for i in range(GROUP_START, GROUP_END)]
144     pool = Pool()
145     pool.map(main, groups)

原文地址:https://www.cnblogs.com/yunlongaimeng/p/9572148.html

时间: 2024-08-03 18:50:22

python多线程爬取-今日头条的街拍数据(附源码加思路注释)的相关文章

python爬虫—— 抓取今日头条的街拍的妹子图

AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 近期在学习获取js动态加载网页的爬虫,决定通过实例加深理解. 1.首先是url的研究(谷歌浏览器的审查功能) http://www.toutiao.com/search_content/?offset=0&format=json&keyword=%E8%A1%97%E6%8B%8D&autoload=

【Python3网络爬虫开发实战】 分析Ajax爬取今日头条街拍美图

前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:haoxuan10 本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 准备工作在本节开始之前,请确保已经安装好requests库.如果没有安装,可以参考第1章.另外如果你对python的库不是很熟的话,建议先去小编的Python交流.裙 :一久武其而而流

芝麻HTTP:分析Ajax爬取今日头条街拍美图

本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 1. 准备工作 在本节开始之前,请确保已经安装好requests库. 2.实战演练 首先,实现方法get_page()来加载单个Ajax请求的结果.其中唯一变化的参数就是offset,所以我们将它当作参数传递,实现如下: import requests from urllib.parse import urlencode def

使用python-aiohttp爬取今日头条

http://blog.csdn.net/u011475134/article/details/70198533 原出处 在上一篇文章<使用python-aiohttp爬取网易云音乐>中,我们给自己的微信公众号添加了在线点歌的功能,这次我们再增加一个新闻浏览的功能.由于我平时浏览新闻用的是今日头条,所以在这里就想通过爬取今日头条来获取新闻.不过遗憾的是,这一次我在网上没有找到满意的方法,所以还是自己动手吧. 打开抓包软件Fiddler并设置Filters.  打开今日头条网页,选择热点. ur

Python3爬取今日头条有关《人民的名义》文章

Python3爬取今日头条有关<人民的名义>文章 最近一直在看Python的基础语法知识,五一假期手痒痒想练练,正好<人民的名义>刚结束,于是决定扒一下头条上面的人名的名义文章,试试技术同时可以集中看一下大家的脑洞也是极好的. 首先,我们先打开头条的网页版,在右上角搜索框输入关键词,通过chrome调试工具,我们定位到头条的search栏调用的的API为: http://www.toutiao.com/search_content/?offset=0&format=json

Python3从零开始爬取今日头条的新闻【一、开发环境搭建】

Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Python3从零开始爬取今日头条的新闻[四.模拟点击切换tab标签获取内容] Python3从零开始爬取今日头条的新闻[五.解析头条视频真实播放地址并自动下载] 所谓爬虫,就是通过编程的方式自动从网络上获取自己所需的资源,比如文章.图片.音乐.视频等多媒体资源.通过一定的方式获取到html的内容,再通过

使用scrapy爬虫,爬取今日头条首页推荐新闻(scrapy+selenium+PhantomJS)

爬取今日头条https://www.toutiao.com/首页推荐的新闻,打开网址得到如下界面 查看源代码你会发现 全是js代码,说明今日头条的内容是通过js动态生成的. 用火狐浏览器F12查看得知 得到了今日头条的推荐新闻的接口地址:https://www.toutiao.com/api/pc/focus/ 单独访问这个地址得到 此接口得到的数据格式为json数据 我们用scrapy+selenium+PhantomJS的方式获取今日头条推荐的内容 下面是是scrapy中最核心的代码,位于s

用Ajax爬取今日头条图片

Ajax原理 ? 在用requests抓取页面时,得到的结果可能和浏览器中看到的不一样:在浏览器中可以正常显示的页面数据,但用requests得到的结果并没有.这是因为requests获取的都是原始 HTML文档,而浏览器中页面 则是经过Ajax处理数据后生成的.这些数据可能在HTML文档中,也可能是经过JavaScript和特定算法后生成的. ? 刚开始HTML文档中不包含某些数据,当原始页面加载完后,会向服务器发送Ajax请求获取数据,这些数据被JavaScript处理形成一些新页面. ?

用Ajax爬取今日头条图片集

Ajax原理 ? 在用requests抓取页面时,得到的结果可能和浏览器中看到的不一样:在浏览器中可以正常显示的页面数据,但用requests得到的结果并没有.这是因为requests获取的都是原始 HTML文档,而浏览器中页面 则是经过Ajax处理数据后生成的.这些数据可能在HTML文档中,也可能是经过JavaScript和特定算法后生成的. ? 刚开始HTML文档中不包含某些数据,当原始页面加载完后,会向服务器发送Ajax请求获取数据,这些数据被JavaScript处理形成一些新页面. ?