java爬取今日头条_今日头条抓取街拍图片数据集
spider1: 抓取街拍页面的所有入口链接:
1.数据查看到,街拍页面需要的数据集都在data这个集合中,而data是整个数据集字典的一个键,data这个键又包括了一个list,list中是一个个字典。
2. list中包括了是图集的,以及是单个图片显示内容的。
3. 对比list中的数据集,可以发现,单个图片显示内容的是有:single_mode这个键
4.同时查看data的数据集:可以看到键‘url’或‘article_url’所对应的值,是我们需要的url入口链接,这边要注意是否有url这个键
5.爬下来的网址发现有一类多余的,要剔除类似:https开头的,news的,即如果没有group在url里面的都要剔除,这是跑了到offset=180的结果
# 爬取今日头条街拍的数据。
import json
import os
from hashlib import md5
import pymongo
from bs4 import BeautifulSoup
import requests
import re
from urllib.parse import urlencode
from requests.exceptions import RequestException
from config import * # 将config中的对象全部引入
from multiprocessing import Pool # 开启进程池
client = pymongo.MongoClient(MONGO_URL, 27017)
db = client[MONGO_DB]
# spider1:负责抓取,街拍的的所有链接入口
def get_all_url(offset, keyword):
data = {
'offset': offset,
'format': 'json',
'keyword': keyword,
'autoload': 'true',
'count': 20,
'cur_tab': 1,
'from': 'search_tab' # some are gallery
} # 请求的字符串参数 query string paramenter
# 对网页进行响应请求:
url = 'https://www.toutiao.com/search_content/?' + urlencode(data) # 对data参数进行网络编码
all_url = []
try:
response = requests.get(url)
if response.status_code == 200: # 即能够正常请求网络,我们就对网络url进行抓取
#print(response.text) # 看一下数据:可以看到数据:\u7687\u57ce类似这种json数据
response = json.loads(response.text) # 将其转化为json对象。
# print(response) # 可以看到数据比较正常,此时里面有我们需要抓取的数据。用BeatifulSoup去解析了一下,发现,json对象不能用它解析
if response and 'data' in response.keys():
for data in response['data']: # data 只是response的一个键。
if 'single_mode' not in data.keys() and 'article_url' in data.keys():
# all_url.append(data['url']) # 这个key使用,但是用生成器,貌似会更好,如果需要储存在mongodb中,这个也不错
# print(data.get('url')) 现在返回没有什么问题了
yield data.get('article_url') # 向外面提供url去爬取
except RequestException as f:
print('请求页面失败!')
def url_washing(offset):
'''
负责url的清洗工作,最后得到的是需要的url,有用的数据。
'''
url = []
# offset = [x for x in range(Group_start, Group_end, 20)] # url也是一个迭代器
for i in offset:
for j in get_all_url(i, '街拍'):
if 'group' in j:
url.append(j)
#print(j)
return url
# spider2: 爬取详情页的详细信息
def get_detail(url):
'''
url:每一个详情页的url
:return: 详情页的标题,以及图片网址,一个详情页,图片网址不止一个
'''
try:
response = requests.get(url)
if response.status_code == 200: # 即能够正常请求网络,我们就对网络url进行抓取
soup = BeautifulSoup(response.text, 'lxml')
title = soup.select('title')[0].get_text()
images_pattern = re.compile('gallery: JSON.parse\\((.*?)\\)', re.S)
images = re.search(images_pattern, response.text)
images = json.loads(images.group(1)) # json.loads 不能转换单引号数据类型,json对象。
image_url = re.findall('\\"(http.*?)\\"', images)
image_url1 = []
for i in image_url:
image_url1.append(i.replace('\\',''))
data = {
'title': title,
'url': url,
'image_url': image_url1
}
return data # 每一个详情页的数据
except RequestException as f:
print('请求详情页失败!')
def download_image(image_url):
'''
:param image_url: 每一个详情页图片的网址
:return: 将网址中的图片下载到本地
'''
try:
response = requests.get(image_url)
if response.status_code == 200: # 即能够正常请求网络,我们就对网络url进行抓取
sava_image(response.content) # content 是获取图片,视频的二进制内容
except RequestException as f:
print('请求图片失败!')
def sava_image(content):
file_path = '{0}/{1}.{2}'.format(os.getcwd(),md5(content).hexdigest(), 'jpg')
if not os.path.exists(file_path):
with open(file_path, 'wb') as f:
f.write(content)
f.close()
def sava_to_mongo(data):
if db[MONGO_TABLE].update(data, data, upsert=True): # 更新数据库比较好,后面有是否插入的参数
print('储存到MongoDB成功!', data)
return True
return False
def main(offset): # 定义一个主函数,操作所以函数
# offset = [x for x in range(Group_start, Group_end, 20)]
url = url_washing(offset)
for i in url:
data = get_detail(i)
sava_to_mongo(data)
# for url in data['image_url']:
# print('正在下载图片',url)
# download_image(url)
if __name__ == '__main__':
group = [x * 20 for x in range(Group_start, Group_end + 1)] # [x for x in range(Group_start, Group_end, 20)]
main(group)
# pool = Pool()
# pool.map(main, group) # apply_async(main)
# pool.close()
# pool.join()
java爬取今日头条_今日头条抓取街拍图片数据集相关推荐
- python爬取地图地址_用Python抓取百度地图里的店名,地址和联系方式
原标题:用Python抓取百度地图里的店名,地址和联系方式 每日干货好文分享丨请点击+关注 欢迎关注天善智能微信公众号,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区. 对商业智能BI.大数 ...
- python 爬取加密视频_使用Python抓取m3u8加密视频 续:获得index.m3u8 地址
之前写<使用Python抓取m3u8加密视频>笔记的原因,是自己有几个视频想保存,但对于m3u8, .ts 文件拼接不熟悉,就尝试写个脚本练手. 今天看了回复,有同学想知道如何从视频网站上 ...
- java 微信文章评论点赞_使用fiddler抓取微信公众号文章的阅读数、点赞数、评论数...
1 设置fiddler支持https 打开fiddler,在菜单栏中依次选择 [Tools]->[Options]->[HTTPS],勾上如下图的选项: 单击Actions,选择Expor ...
- 系统检测到您正在使用网页抓取工具访问_从网站抓取数据的3种最佳方法
halo,大家好,我是特仑苏,今天呢给大家分享一些Python从网站抓取数据的一些方法,希望可以给大家带来一些帮助! 原作者:Octoparse团队 原出处:作品文(从网站抓取数据的3种最佳方法)/网 ...
- python如何爬虫股票数据_如何抓取股票数据_用Python抓取新浪的股票数据
python爬虫成长之路(一)抓取证券之星的股票数据 其中编译匹配模式findall方法使用这个匹配模式来匹配所需的信息并以列表的形式返回.正则表达式的语法非常多.下面我只列出使用的符号的含义.匹配除 ...
- python抓取经典评论_通过Python抓取天猫评论数据
每日干货好文分享丨请点击+关注 对商业智能BI.数据分析挖掘.大数据.机器学习感兴趣的加微信tsbeidou,邀请你进入交流群. 欢迎关注天善智能微信公众号,我们是专注于商业智能BI,大数据,数据分析 ...
- python抓取数据包_利用python-pypcap抓取带VLAN标签的数据包方法
1.背景介绍 在采用通常的socket抓包方式下,操作系统会自动将收到包的VLAN信息剥离,导致上层应用收到的包不会含有VLAN标签信息.而libpcap虽然是基于socket实现抓包,但在收到数据包 ...
- 爬取今日头条街拍图片
** *爬取今日头条街拍图片 * ** # coding=utf-8 import os import re import time from multiprocessing.pool import ...
- Python爬虫:爬取今日头条“街拍”图片(修改版)
前言 在参考<Python3网络爬虫开发实战>学习爬虫时,练习项目中使用 requests ajax 爬取今日头条的"街拍"图片,发现书上的源代码有些已经不适合现在了, ...
最新文章
- linux diff命令使用示例
- 跨站请求伪造(CSRF/XSRF)
- anaconda python删除pyltp_Anaconda使用
- python opencv报错_OpenCV in Python 入门问题,python报错
-问答-阿里云开发者社区-阿里云...
- 程序员面试金典 - 面试题 17.22. 单词转换(BFS)
- 解决后台json数据返回的字段需要替换的问题
- 今天的练习是敏捷结果30天的最后一天
- Javascript倒计时 支持自定义样式
- 关于websocket长链接的使用
- 一对一语音视频直播双端原生+php后台源码 社交交友APP匹配语音视频聊天即时通信源码
- 腾讯位置服务教你轻松搞定微信发送位置功能
- 移动端开发的兼容适配与性能优化干货分享
- 单片机工程师面试题小计
- xampp php5.6,XAMPP for Linux
- 中国人民大学计算机考研贴吧,中国人民大学计算机系统结构考研经验-人大信息学院考研辅导班...
- [Node] Node.js Webpack和打包过程
- RouterOS搭建一台SSTP Server用于远程办公
- 基于Spring 4.0 的 Web Socket 聊天室/游戏服务端简单架构
- Windows Style Builder学习制作笔记 - 任务栏篇(三)
- c语言疯狂输出1是,【C语言疯狂讲义】(十六)C语言文件操作
热门文章
- 如何在富文本中插入表情,word文档,及数学公式?
- Citrix Receiver for Linux安装和cert证书添加解决SSL错误
- 时空人工智能概念特点和核心能力
- 招银网络java面经
- 图像处理 Matlab GUI系统(全)
- 整理2008-2017年的所有上市公司海外收入数据
- 根据身份证获取用户的年龄,性别,生日等
- C++中的重载丶重写丶重定义丶重定向的区别
- React报错 React Hook useEffect has a missing dependency: ‘obj‘
- 据说这是国外最火的55套PS实用教程!