如何从具有无限滚动的网站中抓取?

时间:2021-04-30 15:48:07

标签: python selenium web-scraping beautifulsoup bots

我设法创建了一个可以收集项目描述的网络抓取工具,但是页面在滚动时会加载更多项目。

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)

2 个答案:

答案 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。