python多线程爬取-今日头条的街拍数据(附源码加思路注释)
这里用的是json+re+requests+beautifulsoup+多线程 1 import json
import re
from multiprocessing.pool import Pool import requests
from bs4 import BeautifulSoup
from config import *
from requests import RequestException def get_page_index(offset, keyword):
'''得到一个页面的索引'''
data = {
'offset': offset,
'format': 'json',
'keyword': keyword,
'autoload': 'true',
'count': '',
'cur_tab': '',
'from': 'search_tab'
}
# 请求方式一
# url = 'https://www.toutiao.com/search_content/?'+urlencode(data)
# response = requests.get(url) # 请求方式二
url = 'https://www.toutiao.com/search_content/'
try:
response = requests.get(url, params=data)
if response.status_code == 200:
return response.text
return None
except RequestException:
return None def parse_page_index(html):
'''解析json数据'''
data = json.loads(html)
if data and 'data' in data.keys():
for item in data.get('data'):
yield item.get('article_url') def get_page_detail(url):
'''得到详情页的数据'''
# 添加的请求头
headers = {
'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',
}
try:
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.text
return None
except RequestException:
return None def parse_page_detail(html, url):
'''解析详情页数据'''
soup = BeautifulSoup(html, 'lxml')
t = soup.select('title')
for i in t:
title = i.get_text() pattern = re.compile('gallery: JSON.parse\("(.*?)"\),', re.S)
result = re.search(pattern, html)
if result: # print(result.group(1))
d = re.sub('\\\\', '', result.group(1))
# print(d)
data = json.loads(d)
if data:
images = [item.get('url') for item in data.get('sub_images')]
for image in images:
download_image(image, title)
return {
'title': title,
'url': url,
'images': images
}
else:
None def download_image(url, title):
'''
图片下载
:param url: 下载的连接
:return:
'''
print('正在下载', url)
try:
response = requests.get(url)
if response.status_code == 200:
content = response.content
save_to_image(content, title)
return None
except RequestException:
return None count = 0 def save_to_image(content, title):
global count
'''
保存图片文件
:param content: 图片文件的内容
:return:
'''
name = title + str(count)
file_path = './头条/{}.{}'.format(name, 'jpg')
with open(file_path, 'wb') as f:
count += 1
f.write(content) def main(offset):
'''主程序入口'''
html = get_page_index(offset, '街拍') # print(html)
for url in parse_page_index(html): if url:
# print(url)
html = get_page_detail(url)
if html:
# print(parse_page_detail(html, url))
result = parse_page_detail(html, url)
if result:
print(result)
# save_to_mongo(result) GROUP_START = 1
GROUP_END = 20
if __name__ == '__main__':
groups = [i * 20 for i in range(GROUP_START, GROUP_END)]
pool = Pool()
pool.map(main, groups)
python多线程爬取-今日头条的街拍数据(附源码加思路注释)的更多相关文章
- python爬虫—— 抓取今日头条的街拍的妹子图
AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 近期在学习获取j ...
- 分析AJAX抓取今日头条的街拍美图并把信息存入mongodb中
今天学习分析ajax 请求,现把学得记录, 把我们在今日头条搜索街拍美图的时候,今日头条会发起ajax请求去请求图片,所以我们在网页源码中不能找到图片的url,但是今日头条网页中有一个json 文件, ...
- python 简单爬取今日头条热点新闻(一)
今日头条如今在自媒体领域算是比较强大的存在,今天就带大家利用python爬去今日头条的热点新闻,理论上是可以做到无限爬取的: 在浏览器中打开今日头条的链接,选中左侧的热点,在浏览器开发者模式netwo ...
- 分析 ajax 请求并抓取 “今日头条的街拍图”
今日头条抓取页面: 分析街拍页面的 ajax 请求: 通过在 XHR 中查看内容,获取 url 链接,params 参数信息,将两者进行拼接后取得完整 url 地址.data 中的 article_u ...
- Python 爬虫爬取今日头条街拍上的图片
# 今日头条--街拍 import requests from urllib.parse import urlencode import os from hashlib import md5 from ...
- 爬虫—分析Ajax爬取今日头条图片
以今日头条为例分析Ajax请求抓取网页数据.本次抓取今日头条的街拍关键字对应的图片,并保存到本地 一,分析 打开今日头条主页,在搜索框中输入街拍二字,打开开发者工具,发现浏览器显示的数据不在其源码里面 ...
- PYTHON 爬虫笔记九:利用Ajax+正则表达式+BeautifulSoup爬取今日头条街拍图集(实战项目二)
利用Ajax+正则表达式+BeautifulSoup爬取今日头条街拍图集 目标站点分析 今日头条这类的网站制作,从数据形式,CSS样式都是通过数据接口的样式来决定的,所以它的抓取方法和其他网页的抓取方 ...
- 【Python3网络爬虫开发实战】6.4-分析Ajax爬取今日头条街拍美图【华为云技术分享】
[摘要] 本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 1. 准备工作 在本节 ...
- 【Python3网络爬虫开发实战】 分析Ajax爬取今日头条街拍美图
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:haoxuan10 本节中,我们以今日头条为例来尝试通过分析Ajax请求 ...
随机推荐
- Django中模板语音变量forloop
forloop.counter 从1开始 forloop.counter0 从0开始 forloop.revcounter 倒序(表示循环中剩余项的整型变量.) forloop.revcount ...
- Network Architecture Search Survey
- ORACLE数据库,数据量大,转移数据到备份表语句
INSERT INTO TEMP_BUS_TRAVEL_INFO ( SELECT * FROM BUS_TRAVEL_INFO t ') SELECT COUNT(*) FROM TEMP_BUS_ ...
- ROS tf 两个常用的函数
/** \brief Get the transform between two frames by frame ID. * \param target_frame The frame to wh ...
- Firefox is already running,实际后台查不到进程了
Firefox is already running, but is not responding. To open a new window, you must first close the ex ...
- c++不定参数函数
不定参数当年做为C/C++语言一个特长被很多人推崇,但是实际上这种技术并没有应用很多.除了格式化输出之外,我实在没看到多少应用.主要原因是这种技术比较麻烦,副作用也比较多,而一般情况下重载函数也足以替 ...
- 解决python发送multipart/form-data请求上传文件的问题
服务器接收文件时,有时会使用表单接收的方式,这意味着我们需要使用Python的requests上传表单数据和文件. 常用的方式一般如下: data = { 'name': 'nginx' } file ...
- 题解-ZJOI2015地震后的幻想乡
Problem bzoj & 洛谷 题意简述:给定一个\(n\)(\(n\leq 10\))个点\(m\)条边的无向图,每条边的权值为一个\(0\)到\(1\)之间的连续随机变量,求图的最小生 ...
- MATLAB GUI对话框设计
原文地址:http://blog.csdn.net/shuziluoji1988/article/details/8532982 1.公共对话框: 公共对话框是利用windows资源的对话框,包括文件 ...
- jquery获取当前按钮、截取字符串、字符串拼接、动态循环添加元素
截取字符串:字符串拼接:动态循环添加元素:获取当前按钮: {data : null, render: function(data, type, row ) { var loginName = $(&q ...