python抓取动态网页(switch环境配置lxml抓取静态网页的难点及难点分析方法)
优采云 发布时间: 2021-10-10 11:14python抓取动态网页(switch环境配置lxml抓取静态网页的难点及难点分析方法)
背景说明
有使用switch游戏文件的需要,于是找了一个网站,网站有很多游戏资源,但是这种网站很容易失败,所以我打算用爬虫把资源下载下来,但是在实际爬取的过程中,为了获取实际的网盘地址,需要点击特定的按钮打开,所以结合selenium和html,抓包比较流行网站中的游戏实现
主要收录四个部分
Selenium 环境配置
lxml 获取静态网页[√]
硒得到饼干
selenium 获取下载链接
掌握了以上部分后,就可以算是对爬虫的介绍了
获取游戏的具体页面
爬虫环境在上一章已经配置好了。有兴趣的可以在专栏中找到。本章将抓取网站中各个游戏的具体链接
网站 有按流行度排序的功能,可以按下载量对所有游戏进行排序。大约有四十页的数据。
这个界面的网址很简单。第一个页面的格式是/games/page/1?order=hot 第二个页面的格式是/games/page/2?order=hot
所以首先可以创建一个需要爬取的web_list 网站 准备爬取
import time
import json
import re
import sys
import lxml.html as HTML
import requests
from lxml import etree
import json
aim_url_list = []
for i in range(10):
aim_url_list.append('https://www.xxxx.vip/games/page/{}?order=hot'.format(i+1))
然后以第一页为例,分析在获取整体页面的情况下如何获取游戏名称和具体的网站。
我们把鼠标右键放在游戏画面上,点击右键选择check
可以解析出网站的实际元素组成
可以看到实际需要的游戏网站和游戏名称都在div层,其中网站在a节点的href元素中,游戏名称在alt元素中a节点的子节点img
所以我们可以写出下面的代码来得到
write_dir = {}
for j in range(10):
r = requests.get(aim_url_list[j])
html = etree.HTML(r.text, etree.HTMLParser())
game_list = html.xpath('//div[@class="placeholder"]/a')
for game in game_list:
game_name = game.xpath('./img/@alt')[0]
game_url = game.xpath('./@href')[0]
write_dir[game_name] = game_url
print(write_dir)
with open('./game.json','w') as f:
json.dump(write_dir, f)
time.sleep(3)
首先将父节点为div的节点a存储在game_list中,然后game_url获取节点a的href元素,game_name获取节点a的子节点img的alt元素,最后保存在write_dir中作为字典保存后续使用
上面的完整代码如下
import time
import json
import re
import sys
import lxml.html as HTML
import requests
from lxml import etree
import json
aim_url_list = []
for i in range(10):
aim_url_list.append('https://www.xxxx.vip/games/page/{}?order=hot'.format(i+1))
write_dir = {}
for j in range(10):
r = requests.get(aim_url_list[j])
html = etree.HTML(r.text, etree.HTMLParser())
game_list = html.xpath('//div[@class="placeholder"]/a')
for game in game_list:
game_name = game.xpath('./img/@alt')[0]
game_url = game.xpath('./@href')[0]
write_dir[game_name] = game_url
print(write_dir)
with open('./game.json','w') as f:
json.dump(write_dir, f)
time.sleep(3)
网站 命名避免版权冲突,我们做了编码处理,有需要的朋友可以私信
下一节将处理具体游戏的第二关网站。下一章也是过程中的主要难点,重点分析