我设法创建了一个可以收集项目描述的网络抓取工具,但是页面在滚动时会加载更多项目。
from selenium import webdriver
import time
import requests
from bs4 import BeautifulSoup
from numpy import mean
namelist=[]
driver=webdriver.Chrome()
driver.get("https://waxpeer.com/")
time.sleep(15)
links = driver.find_elements_by_xpath("//div[@class='lpd_div']/a")
我还需要将项目描述格式化为:
★ Karambit| Gamma Doppler (Factory new)
而不是:
★ Karambit
Gamma Doppler
Factory new
desc = driver.find_elements_by_xpath("//div[@class='lpd_div']/div[2]/p")
for item in desc:
print(item.text)
答案 0 :(得分:3)
没有必要使用 Selenium
。数据可通过以下格式向网站 API 发送 GET
请求获得:
https://waxpeer.com/api/data/index/?skip={offset}&sort=best_deals&game=csgo&all=0
每个页面的 offset
为 + 50。
例如,打印姓名:
import requests
URL = (
"https://waxpeer.com/api/data/index/?skip={offset}&sort=best_deals&game=csgo&all=0"
)
offset = 0
while True:
try:
response = requests.get(URL.format(offset=offset)).json()
for data in response["items"]:
print(data["name"])
print("-" * 80)
offset += 50
except KeyError:
break
输出:
★ Karambit | Gamma Doppler (Factory New)
★ Karambit | Gamma Doppler (Factory New)
★ Karambit | Gamma Doppler (Factory New)
★ Butterfly Knife | Doppler (Factory New)
★ Butterfly Knife | Doppler (Factory New)
★ Karambit | Gamma Doppler (Factory New)
★ Karambit | Gamma Doppler (Factory New)
...
...
答案 1 :(得分:1)
这是我目前必须抓取无限滚动页面的内容。
def scroll():
items = self.w.until(ec.presence_of_all_elements_located(self.item_locator))
ActionChains(self.driver).move_to_element(items[-1]).perform()
loader = self.driver.find_elements(*self.loader_locator)
if loader:
return True
return False
ActionChains 部分将找到最后一个项目并滚动到它,导致页面发送更多内容的请求。测试的这一小节我刚刚验证了无限滚动的效果,但是如果您想对找到的元素做任何事情,您可以将这些项目附加到主列表中。
顺便说一下,self.w 是 WebDriverWait。