python - Web-Scrape ,寻找更好的方法来获取类或标记 xpath 和动态网页
问题描述
这是我的网络抓取目标站点。 https://www.aliexpress.com/wholesale?catId=0&SearchText=ipad&SortType=default&g=n&page=1
使用此代码,我可以获得 60 件商品。
import time
from selenium import webdriver
from time import sleep
options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_experimental_option('excludeSwitches', ['enable-logging'])
options.add_argument('--lang=en')
driver = webdriver.Chrome(r'c:\chromedriver\chromedriver.exe', options=options)
options.add_argument(
"user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36")
url = 'https://www.aliexpress.com/wholesale?catId=0&SearchText=ipad&SortType=default&g=n&page=1'
driver.get(url)
sleep(1)
y = 1000
for timer in range(0, 13):
driver.execute_script("window.scrollTo(0, " + str(y) + ")")
y += 1000
time.sleep(1)
items = driver.find_elements_by_xpath('//div[contains(@class, "_2E_KG")]')
print(len(items))
我发现这个网页是动态的,所以我添加了这样的滚动。
for timer in range(0, 13):
driver.execute_script("window.scrollTo(0, " + str(y) + ")")
y += 1000
time.sleep(1)
它有点慢,但对我来说看起来不错。或者你有更好的想法吗?
并使用下面的 xpath 查找来获取项目。
items = driver.find_elements_by_xpath('//div[contains(@class, "_2E_KG")]')
但我相信有一天类名(_2E_KG)会改变,我想放入一个稳定的xpath,但我不知道它会是什么。
解决方案
推荐阅读
- fastreport - C++Builder 社区版(版本 10.4.2)中是否提供 FastReport?
- javascript - POST 获取请求后更新用户列表
- angular - Angular 11 上传进度事件未发生
- spring-boot - Spring Boot 将 DisabledException 转换为 InsufficientAuthenticationException
- r - 如何在数据框中获取差异
- python - 如何将值添加到python字典中的数组值中
- javascript - 返回多个没有键的对象
- arrays - 使用分而治之的最小前缀数组
- php - 如何使用正则表达式 php 在大字符串中查找单个数字
- c - 如何按位切断无符号长整数中的第一位?