【问题标题】:Selenium: How to scrape/crawl until last page?Selenium:如何刮/爬到最后一页?
【发布时间】:2021-07-02 06:18:24
【问题描述】:

所以我目前有一个函数:

def main(search_term):
    # RUN MAIN PROGRAM ROUTINE
    chromedriver = "chromedriver path"
    driver = webdriver.Chrome(chromedriver)
    
    records = []
    url = get_url(search_term)
    
    # SELECT NUMBER OF PAGES TO CRAWL
    
    #
    for page in range(1, 21):
    #for page in itertools.count():
        driver.get(url.format(page))
        soup = BeautifulSoup(driver.page_source, 'html.parser')
        results = soup.find_all('div', {'data-component-type': 's-search-result'})
        print(page)     
        
        for item in results:
            record = extract_record(item)
            if record:
                records.append(record)
                

在给定“电子产品”或“化妆品”或“airpod pro case”之类的 search_term 的情况下,从搜索结果的第 1 页到第 21 页抓取数据

但是,我意识到一些搜索结果会显示第 1 页到第 3 页、第 1 页到第 7 页、第 1 页到第 20 页等页面,具体取决于我的 search_term 的具体程度。

我想如果下一个按钮被启用,我可以抓取数据,直到我的代码注意到下一个按钮被禁用,这意味着它是结果的最后一页。

启用的下一个按钮和禁用的下一个按钮的xpaths是:

next_button_enabled = driver.find_element_by_xpath('//li[@class="a-last"]')
next_button_disabled = driver.find_element_by_xpath('//li[@class="a-disabled a-last"]')

但我不确定如何使用我目前所写的内容来处理这些信息。

【问题讨论】:

标签: python python-3.x selenium web-scraping


【解决方案1】:

因为这是一个页面 url 的样子 https://www.amazon.com/s?k=phone&page=2 你可以做一些基本的链接黑客。您唯一需要知道的是总共有多少页。 soup.find('ul', class_="a-pagination").find_all('li') 将检索分页列表。最后一个页码在该列表的倒数第二项中:

from selenium import webdriver
from bs4 import BeautifulSoup

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')

url='https://www.amazon.com/s?k=phone' #or https://www.amazon.com/s?k=maison+kitsune+airpod+pro+case
wd = webdriver.Chrome('chromedriver',options=options)
wd.get(url)
soup = BeautifulSoup(wd.page_source, "html.parser")
last_page = int([i.get_text() for i in soup.find('ul', class_="a-pagination").find_all('li')][-2])

for page in range(2, last_page + 1):
  page_url = f'{url}&page={page}'
  #get url with Selenium etc.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-01
    • 2018-12-08
    • 2018-05-22
    • 2021-11-08
    • 2020-12-11
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    相关资源
    最近更新 更多