java爬虫抓取动态网页(谷歌浏览器的检查功能分析(图)为什么呢?)

优采云 发布时间: 2021-11-04 16:12

  java爬虫抓取动态网页(谷歌浏览器的检查功能分析(图)为什么呢?)

  目标网址网址:

  %E5%8A%A8%E4%BD%9C&type=5&interval_id=100:90&action=

  使用谷歌浏览器的检查功能分析网站,发现需要抓取的内容在'movie-list-item playable unwatched'类下。

  好了,我们按照之前的方式爬一下,看看。

  url='https://movie.douban.com/typerank?type_name=%E5%8A%A8%E4%BD%9C&type=5&interval_id=100:90&action='

res=requests.get(url)

res.encoding= 'utf-8'#该网页是以utf-8的编码形式显示的

soup=BeautifulSoup(res.text, 'html.parser')#使用美丽汤解析网页内容

print(soup)

  查看打印结果,发现get信息中没有电影的相关信息。为什么是这样?因为这个页面上的所有电影信息都是动态加载的。

  转动鼠标滚轮下拉页面,你会发现加载的内容越来越多,查看显示器,'movie-list-item playable unwatched'类的列数增加了。看来静态的网站 集对动态加载的网站 不起作用,那么如何解决呢?

  点击显示器的网络--->XHR。继续向下滑动滚轮,你会发现Name下的文件增加了!

  

  点击文件末尾的start=0&limit=20和start=20&limit=20的文件,对比查看,发现这正是我们要找的信息。

  

  通过对比,我们现在可以大胆猜想,start指的是起始电影序列号,limit是每个请求显示的电影数量,信息以json格式存储。我们再次点击Headers,发现如下:

  

  发现获取的内容是通过GET url获取的:';interval_id=100%3A90&action=&start=0&limit=20'。

  好的,现在我们知道如何获取数据了。经过测试,我们其实可以直接start=0 limit=256直接得到所有的top10数据。但是我们还是按照网站的要求,一次拿到20份。代码显示如下:

  import requests

import json

#爬取豆瓣电影分类排行榜 - 动作片top10%的电影名、评分和豆瓣链接

url='https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start={}&limit=20'

filminfolist=[]#存放结果

for i in range(0,300,20):

aimurl=url.format(i)

res=requests.get(aimurl)

jd=json.loads(res.text)#改成json格式方便读取数据

for j in jd:

filminfo={}#以字典存储单条数据

filminfo['title']=j['title']

filminfo['score'] = j['score']

filminfo['url'] = j['url']

filminfolist.append(filminfo)

  打印filminfolist的结果如下:

  {'title':'这个杀手不太冷','score':'9.4','url':''}

  {'title':'七武士','score':'9.2','url':''}

  {'title':'蝙蝠侠:黑暗骑士','score':'9.1','url':''}

  {'title':'指环王3:无敌之王','score':'9.1','url':''}

  {'title':'Fight Club','score':'9.0','url':''}

  {'title':'指环王2:两塔','score':'9.0','url':''}

  {'title':'General title','score':'9.0','url':''}

  {'title':'魔戒1:魔戒再现','score':'8.9','url':''}

  ......

  稍微展开一下:

  初识DataFrame

  使用Data Frame格式将刚才的数据保存到excel中,这是通过使用包pandas实现的。

  代码显示如下:

  import pandas

df=pandas.DataFrame(filminfolist)

df.to_excel('D:\\douban.xlsx')

  总结:对于动态加载的网页,需要多观察监视器,分析实际爬取的页面。美利堂解析html格式,json解析json格式。当然,也可以使用正则表达式进行分析。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线