最近一直在玩switch的《宝可梦剑盾》,也没玩多久还有的资讯都不知道 又菜又爱玩 所以呢今天我们准备爬取《宝可梦剑盾》的资讯!!
一、分析百度资讯页面(宝可梦剑盾)
① 查找数据在什么地方
首先呢看看我们需要的数据是静态加载还是ajks动态加载
我们可以看到百度资讯的页面是有页数的 所以它是静态加载
小知识:一般静态加载的数据都会在网页源代码 而ajks动态加载会在数据接口
不管怎么样我们还是去看看需要的数据是在网页源代码里还是在数据接口中
↑↑↑上图是网页源代码 我们可以看到它的数据 是在网页源代码中
② 观察url
url翻页
我们需要观察页面翻页后url会发生什么变化以便我们爬虫翻页
第一页:
https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&fr=image&ie=utf-8&word=%E5%AE%9D%E5%8F%AF%E6%A2%A6%E5%89%91%E7%9B%BE&x_bfe_rqs=03E80&x_bfe_tjscore=0.100000&tngroupname=organic_news&newVideo=12&rsv_dl=news_b_pn&pn=0
第二页:
https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&fr=image&ie=utf-8&word=%E5%AE%9D%E5%8F%AF%E6%A2%A6%E5%89%91%E7%9B%BE&x_bfe_rqs=03E80&x_bfe_tjscore=0.100000&tngroupname=organic_news&newVideo=12&rsv_dl=news_b_pn&pn=10
我们可以看到前面好像是一模一样的 但是在最后有一个pn不一样 第一页pn=0 第二页pn=10 而一页刚好也是10个 那么差不多可以确定这个pn就是用于翻页
url中的16进制
在我们观察上面的url翻页时 是否有注意到url中有一串16进制的字符
word=%E5%AE%9D%E5%8F%AF%E6%A2%A6%E5%89%91%E7%9B%BE
我们观察下没有复制过来的时候是怎么样的
我们可以看到网页中的url里面的word=宝可梦剑盾 所以这一串16进制是宝可梦剑盾转来的
③ 整理爬虫思路
1.遍历range 进行翻页
for x in range(50):
page_url = f'https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&fr=image&ie=utf-8&word=%E5%AE%9D%E5%8F%AF%E6%A2%A6%E5%89%91%E7%9B%BE&x_bfe_rqs=03E80&x_bfe_tjscore=0.100000&tngroupname=organic_news&newVideo=12&rsv_dl=news_b_pn&pn={x * 10}'
2.使用urllib中的quote把宝可梦剑盾转成16进制并放入url
# 加载模块
from urllib import parse
# 使用模块把宝可梦剑盾转成16进制
bkm = parse.quote('宝可梦剑盾')
# 将16进制放入url中
for x in range(50):
page_url = f'https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&fr=image&ie=utf-8&word={bkm}&x_bfe_rqs=03E80&x_bfe_tjscore=0.100000&tngroupname=organic_news&newVideo=12&rsv_dl=news_b_pn&pn={x * 10}'
3.使用xpath爬取网页源代码中的标题和详情页
lis = html.xpath('//div[@id="content_left"]/div/div')
for li in lis:
title = li.xpath('./div/h3/a//text()'