阿狸V任务页面爬取数据解析
需求:
爬取:https://v.taobao.com/v/content/video 所有主播详情页信息
首页分析
分析可以得知数据是通过ajax请求获取的.

分析请求头


详情页分析

详情页和详情页数据url对比分析

经过测试,发现我们只需要更改'''userid'''的值就可以获取到不同的数据.
分析完毕开始编写代码
完整代码如下
import re
import requests
import json
import jsonpath
import pymongo
class VtaoSpider:
headers={
'referer': 'https://v.taobao.com/v/content/video',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36',
} db=None
def open(self):
'连接数据库'
client=pymongo.MongoClient(host='106.12.108.236',port=27017)
self.db=client['trip'] def get_first_page(self):
'获取首页所有的数据'
url_lst=[]
for i in range(1,26): #25页数据
'处理页面'
params={
'cateType': 602,
'currentPage': i,
'_ksTS': '1554971959356_87',
'':'',
'_output_charset': 'UTF-8',
'_input_charset': 'UTF-8',
}
start_url='https://v.taobao.com/micromission/req/selectCreatorV3.do' first_data=requests.get(url=start_url,headers=self.headers,params=params)
url_lst.append(first_data)
# print(first_data.text)
return url_lst def get_detail_url(self):
'获取详情页的url'
response_list=self.get_first_page()
all_detail_url=[]
for response in response_list:
dd = response.text
d_dict = json.loads(dd)
detail_url = jsonpath.jsonpath(d_dict, '$..homeUrl')
#detail_url是一个列表
all_detail_url.extend(detail_url)
# print(all_detail_url)
return all_detail_url def get_detail_data(self):
url_list=self.get_detail_url()
# print(url_list)
for url in url_list:
try:
ex='userId=(.*?)&'
user_id=re.findall(ex,url)[0]
detail_data_url=f'https://v.taobao.com/micromission/daren/daren_main_portalv3.do?userId={user_id}&_ksTS=1554976401436_17'
# print(detail_data_url) #获取响应数据
data = requests.get(url=detail_data_url, headers=self.headers).text
data_json=json.loads(data)
darenNick=jsonpath.jsonpath(data_json,'$..darenNick')[0]
darenScore=jsonpath.jsonpath(data_json,'$..darenScore')[0]
nick=jsonpath.jsonpath(data_json,'$..nick')[0]
creatorType=jsonpath.jsonpath(data_json,'$..creatorType')[0]
rank=jsonpath.jsonpath(data_json,'$..rank')
res_data={
'darenNick':darenNick,
'darenScore':darenScore,
'nick':nick,
'creatorType':creatorType,
'rank':rank, }
#存入数据库
if self.db['vtaobao'].insert(res_data):
print('save to mongo is successful!') except Exception as e:
print(e) if __name__ == '__main__':
vspider=VtaoSpider()
#数据库启动只需要执行一次
vspider.open()
vspider.get_detail_data()
一共爬取了450条数据,就是450个主播的相关信息!!!
此代码为使用多进程,多线程,爬取时间不能如你们所愿,感兴趣的朋友可以把代码重构一下,使用多进程,多线程,再分享一波,让大家学习一番,谢谢!!!
阿狸V任务页面爬取数据解析的更多相关文章
- Python实训day07pm【Selenium操作网页、爬取数据-下载歌曲】
练习1-爬取歌曲列表 任务:通过两个案例,练习使用Selenium操作网页.爬取数据.使用无头模式,爬取网易云的内容. ''' 任务:通过两个案例,练习使用Selenium操作网页.爬取数据. 使用无 ...
- 【图文详解】scrapy爬虫与动态页面——爬取拉勾网职位信息(2)
上次挖了一个坑,今天终于填上了,还记得之前我们做的拉勾爬虫吗?那时我们实现了一页的爬取,今天让我们再接再厉,实现多页爬取,顺便实现职位和公司的关键词搜索功能. 之前的内容就不再介绍了,不熟悉的请一定要 ...
- Python使用Scrapy框架爬取数据存入CSV文件(Python爬虫实战4)
1. Scrapy框架 Scrapy是python下实现爬虫功能的框架,能够将数据解析.数据处理.数据存储合为一体功能的爬虫框架. 2. Scrapy安装 1. 安装依赖包 yum install g ...
- 借助Chrome和插件爬取数据
工具 Chrome浏览器 TamperMonkey ReRes Chrome浏览器 chrome浏览器是目前最受欢迎的浏览器,没有之一,它兼容大部分的w3c标准和ecma标准,对于前端工程师在开发过程 ...
- python3编写网络爬虫14-动态渲染页面爬取
一.动态渲染页面爬取 上节课我们了解了Ajax分析和抓取方式,这其实也是JavaScript动态渲染页面的一种情形,通过直接分析Ajax,借助requests和urllib实现数据爬取 但是javaS ...
- web scraper——简单的爬取数据【二】
web scraper——安装[一] 在上文中我们已经安装好了web scraper现在我们来进行简单的爬取,就来爬取百度的实时热点吧. http://top.baidu.com/buzz?b=1&a ...
- 关于js渲染网页时爬取数据的思路和全过程(附源码)
于js渲染网页时爬取数据的思路 首先可以先去用requests库访问url来测试一下能不能拿到数据,如果能拿到那么就是一个普通的网页,如果出现403类的错误代码可以在requests.get()方法里 ...
- node.js爬取数据并定时发送HTML邮件
node.js是前端程序员不可不学的一个框架,我们可以通过它来爬取数据.发送邮件.存取数据等等.下面我们通过koa2框架简单的只有一个小爬虫并使用定时任务来发送小邮件! 首先我们先来看一下效果图 差不 ...
- 爬虫系列5:scrapy动态页面爬取的另一种思路
前面有篇文章给出了爬取动态页面的一种思路,即应用Selenium+Firefox(参考<scrapy动态页面爬取>).但是selenium需要运行本地浏览器,比较耗时,不太适合大规模网页抓 ...
随机推荐
- Golang随机数生成
需求:10以内随机生成2个幸运数字 package main import ( "fmt" "math/rand" ) func main() { fmt.Pr ...
- 【普及篇】通信能力API及其前景分析
** 1.目前通信行业发展背景**运营商基础通信能力的价值逐渐提升进入数字化时代以来,信息产业正迎来新变革与新发展——网络信息技术与社会各领域全面深度融合,为工业制造.智慧城市等各行业赋能.运营商传统 ...
- nginx之location配置详解及案例
语法规则: location [=|~|~*|^~] /uri/ { … } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码, ...
- Unsupported major.minor version 52.0解决办法
一.错误现象:当改变了jdk版本时,在编译java时,会遇到Unsupported major.minor version错误.jdk版本和stanford parser对应关系 JDK版本和Java ...
- rabbitmq消费者“无故消失”
hi,all 导读:9月1号17:12左右,发现影子队列存在大量“unacked”(收到了消息,但是还没有手动确认消息)的消息,一段时间后“unacked”的数量没有减少,但是观察消费者端的日志, ...
- javascript 字符串转换数字的方法大总结
方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有 ...
- ES6 模块化笔记
ES6 模块的设计思想,是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量. ES6 模块不是对象,而是通过export命令显式指定输出的代码,再通过import命令输入. // ...
- dubbo 序列化机制之 hessian2序列化实现原理分析
对于远程通信,往往都会涉及到数据持久化传输问题.往大了说,就是,从A发出的信息,怎样能被B接收到相同信息内容!小点说就是,编码与解码问题! 而在dubbo或者说是java的远程通信中,编解码则往往伴随 ...
- Python--开发简单爬虫
简单爬虫架构 动态运行流程 URL管理器的作用 URL管理器的3种实现方式 网页下载器的作用 Python网页下载器的种类 urllib2下载网页的3种方法 网页解析器的作用 Python的几种网页解 ...
- 简易调色盘控件 for .NET(EN)
By Conmajia Originally posted in 2012 Introduction Simple & fast implementation of a rectangular ...