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爬取今日头条_今日头条抓取街拍图片数据集相关推荐

  1. python爬取地图地址_用Python抓取百度地图里的店名,地址和联系方式

    原标题:用Python抓取百度地图里的店名,地址和联系方式 每日干货好文分享丨请点击+关注 欢迎关注天善智能微信公众号,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区. 对商业智能BI.大数 ...

  2. python 爬取加密视频_使用Python抓取m3u8加密视频 续:获得index.m3u8 地址

    之前写<使用Python抓取m3u8加密视频>笔记的原因,是自己有几个视频想保存,但对于m3u8, .ts 文件拼接不熟悉,就尝试写个脚本练手. 今天看了回复,有同学想知道如何从视频网站上 ...

  3. java 微信文章评论点赞_使用fiddler抓取微信公众号文章的阅读数、点赞数、评论数...

    1 设置fiddler支持https 打开fiddler,在菜单栏中依次选择 [Tools]->[Options]->[HTTPS],勾上如下图的选项: 单击Actions,选择Expor ...

  4. 系统检测到您正在使用网页抓取工具访问_从网站抓取数据的3种最佳方法

    halo,大家好,我是特仑苏,今天呢给大家分享一些Python从网站抓取数据的一些方法,希望可以给大家带来一些帮助! 原作者:Octoparse团队 原出处:作品文(从网站抓取数据的3种最佳方法)/网 ...

  5. python如何爬虫股票数据_如何抓取股票数据_用Python抓取新浪的股票数据

    python爬虫成长之路(一)抓取证券之星的股票数据 其中编译匹配模式findall方法使用这个匹配模式来匹配所需的信息并以列表的形式返回.正则表达式的语法非常多.下面我只列出使用的符号的含义.匹配除 ...

  6. python抓取经典评论_通过Python抓取天猫评论数据

    每日干货好文分享丨请点击+关注 对商业智能BI.数据分析挖掘.大数据.机器学习感兴趣的加微信tsbeidou,邀请你进入交流群. 欢迎关注天善智能微信公众号,我们是专注于商业智能BI,大数据,数据分析 ...

  7. python抓取数据包_利用python-pypcap抓取带VLAN标签的数据包方法

    1.背景介绍 在采用通常的socket抓包方式下,操作系统会自动将收到包的VLAN信息剥离,导致上层应用收到的包不会含有VLAN标签信息.而libpcap虽然是基于socket实现抓包,但在收到数据包 ...

  8. 爬取今日头条街拍图片

    ** *爬取今日头条街拍图片 * ** # coding=utf-8 import os import re import time from multiprocessing.pool import ...

  9. Python爬虫:爬取今日头条“街拍”图片(修改版)

    前言 在参考<Python3网络爬虫开发实战>学习爬虫时,练习项目中使用 requests ajax 爬取今日头条的"街拍"图片,发现书上的源代码有些已经不适合现在了, ...

最新文章

  1. linux diff命令使用示例
  2. 跨站请求伪造(CSRF/XSRF)
  3. anaconda python删除pyltp_Anaconda使用
  4. python opencv报错_OpenCV in Python 入门问题,python报错 -问答-阿里云开发者社区-阿里云...
  5. 程序员面试金典 - 面试题 17.22. 单词转换(BFS)
  6. 解决后台json数据返回的字段需要替换的问题
  7. 今天的练习是敏捷结果30天的最后一天
  8. Javascript倒计时 支持自定义样式
  9. 关于websocket长链接的使用
  10. 一对一语音视频直播双端原生+php后台源码 社交交友APP匹配语音视频聊天即时通信源码
  11. 腾讯位置服务教你轻松搞定微信发送位置功能
  12. 移动端开发的兼容适配与性能优化干货分享
  13. 单片机工程师面试题小计
  14. xampp php5.6,XAMPP for Linux
  15. 中国人民大学计算机考研贴吧,中国人民大学计算机系统结构考研经验-人大信息学院考研辅导班...
  16. [Node] Node.js Webpack和打包过程
  17. RouterOS搭建一台SSTP Server用于远程办公
  18. 基于Spring 4.0 的 Web Socket 聊天室/游戏服务端简单架构
  19. Windows Style Builder学习制作笔记 - 任务栏篇(三)
  20. c语言疯狂输出1是,【C语言疯狂讲义】(十六)C语言文件操作

热门文章

  1. 如何在富文本中插入表情,word文档,及数学公式?
  2. Citrix Receiver for Linux安装和cert证书添加解决SSL错误
  3. 时空人工智能概念特点和核心能力
  4. 招银网络java面经
  5. 图像处理 Matlab GUI系统(全)
  6. 整理2008-2017年的所有上市公司海外收入数据
  7. 根据身份证获取用户的年龄,性别,生日等
  8. C++中的重载丶重写丶重定义丶重定向的区别
  9. React报错 React Hook useEffect has a missing dependency: ‘obj‘
  10. 据说这是国外最火的55套PS实用教程!