对于复杂难以解析的网站请求爬取办法

使用selenium 打开网页进行模拟

selenium 是一个自动化工具,提供了一套API供给python这类语言调用控制浏览器的功能,其中包含最基础的点击,前进后退等浏览器基本功能,还包含可以直接运行Js在浏览器上,实现各类复杂效果。

selenium环境安装

安装selenium 包含两部分,一部分是python需要下载selenium包,另一部分是下载浏览器驱动。

python 下包

1
pip install selenium

下载驱动以及安装驱动

下载地址 http://chromedriver.storage.googleapis.com/index.html
在浏览器设置关于Chrome查看谷歌浏览器版本,随后下载对应的驱动即可。
将该驱动放置在环境变量里即可,如果没有放那么在使用的时候需要指定位置。

1
2
3
options = webdriver.ChromeOptions()
options.binary_location = r"C:\driver.exe"
driver = webdriver.Chrome(options=options)

基础请求

driver.get(url)

配置信息设置

  • 使用无头模式,即不打开浏览器进行请求 options.headless = True
  • 添加UA options.add_argument('user-agent="Mozilla/5.0 (iPod; U; CPU iPhone OS 2_1 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5F137 Safari/525.20"')
  • 添加Cookie driver.add_cookie({"name":key,"value":result[key]}) 需要注意,设置cookie要在请求后才能设置。

操作模拟

  • 通过find_element获取到单个元素执行click driver.find_element(By.CSS_SELECTOR,".Modal-closeButton").click()
  • 通过find_elements 可获取多个元素 `driver.find_elements(By.CSS_SELECTOR,”.Modal-closeButton”)

模拟人滚轮移动

思路:可以通过使用dom获取到当前位置,并记录下来,每次滚动一定距离后,下一次以记录的值再进行滚动,直到当前记录的位置值不再变化,代表着滚动到底部了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

def scroll_to_bottom(driver):
new_height = driver.execute_script("return document.body.scrollHeight")
last_height = new_height-1000
for i in range(last_height, new_height, 350):
time.sleep(0.05)
driver.execute_script('window.scrollTo(0, %s)' % i)

is_end = False
last_height = 0
while not is_end:
new_height = driver.execute_script("return document.body.scrollHeight")
if(last_height ==new_height):
is_end = True
else:
last_height = new_height
# 判定前一次和当前的滚动最大高度是否相等
time.sleep(0.5)
scroll_to_bottom(driver=driver)



对于复杂难以解析的网站请求爬取办法
https://chenhongjun.top/2023/01/15/对于复杂难以解析的网站请求爬取办法/
作者
Delightening
发布于
2023年1月15日
许可协议