使用 BeautifulSoup 和 Selenium 抓取数据

霍布斯克

我正在使用 BeautifulSoup 和 Selenium 来提取 Web 数据(beautifulsoup 来解析 HTML 页面和 Selenium 来单击 Next 以进入页面上的下一个项目列表)。

我需要代码做的是:

  1. 获取当前 URL 并检索我要抓取的信息
  2. 单击下一步转到同一 URL 中的下一页
  3. 从第 2 页检索信息
  4. 点击下一步进入第3页...

我当前的代码正在做的是:

  1. 获取当前 URL 并检索我希望正确抓取的信息
  2. 单击下一步以正确转到下一页(我可以在无头模式下看到这种情况)
  3. 仍在从第 1 页检索信息
  4. 点击next正确跳转到第3页

我认为这是因为我在代码中以错误的顺序使用了一些步骤。下面是一个精简版。我做错了什么可见吗?

import requests
from bs4 import BeautifulSoup
from csv import writer
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
import time
from selenium.webdriver.common.by import By
  
URL = "https://www.theitdepot.com/products-Motherboards_C13.html"
wd = webdriver.Chrome(ChromeDriverManager().install())
wd.get(URL)

running = True
while running:
    page = requests.get(URL, verify = False)
    soup = BeautifulSoup(page.content, "html.parser")
    results = soup.find(id="filter_display")

    item_elements = results.find_all("div", class_="product-details text-md-left flex-grow-1")
    with open('data.csv', 'a', encoding='utf8', newline='') as f:
        thewriter = writer(f)
        for item_element in item_elements:
            #code to retrieve information and write to CSV here 
            name_element = item_element.find("div", class_="card-text px-2 py-1 font-size85 product_title")
            name = str(name_element.text)
            print (name)
        next = wd.find_element(by=By.XPATH, value="//*[contains(text(), 'Next →')]")
        wd.execute_script("arguments[0].click();", next)
        time.sleep(10) #prevent ban
    

(注意:我知道这目前是一个无限循环,我打算添加逻辑以知道所有页面何时完成)

声波

对于这个简单的任务,您可以使用 Selenium 本身而不是 BeautifulSoup。此外,您可以将产品名称保存在列表中并使用numpy. 我更喜欢 numpy,因为它可以让您用with open(...) as f: etc.简单的行替换代码块。

number_of_pages_to_scrape = 5
names = []
for i in range(number_of_pages_to_scrape):
    items = driver.find_elements(By.CSS_SELECTOR, "div[class='card-text px-2 py-1 font-size85 product_title']")
    for item in items:
        print(item.text)
        names.append(item.text)
    driver.find_element(By.XPATH, "//*[contains(text(), 'Next')]").click()
    time.sleep(10)

import numpy
numpy.savetxt("data.csv", names, fmt ='%s')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法使用 Selenium 和 BeautifulSoup 抓取文本

使用 Requests 和 Beautifulsoup 抓取数据

使用Selenium和BeautifulSoup输入内容来抓取网站?

使用 Selenium 和 BeautifulSoup 抓取饥饿游戏的用户评分

使用BeautifulSoup和Selenium抓取特定的html标签

使用 Python、Selenium 和 BeautifulSoup 来抓取标签的内容?

使用 Selenium 和 BeautifulSoup 进行 Zillow 网页抓取

使用 Selenium 和 BeautifulSoup 进行网页抓取返回空列表

如何使用Python Selenium BeautifulSoup抓取表格html格式的数据?

使用 BeautifulSoup 或 Selenium 抓取网站时找不到数据

使用 BeautifulSoup 抓取数据

需要使用xpath和beautifulsoup从网站抓取数据

使用python和BeautifulSoup抓取数据时,Float的无效侧向

如何使用 Python 和 BeautifulSoup 从 html 表中抓取数据?

使用 Xpath 和 Selenium 抓取和保存数据的问题

使用 selenium 抓取数据

在使用 selenium 和 python 抓取数据时迭代点击

单击标题以使用 selenium 和 scrapy 抓取数据

使用 BeautifulSoup 抓取 Web 数据

使用 selenium 和 BeautifulSoup 抓取动态网页,但新页面不断弹出

使用来自 AJAX 网站的 selenium 和 beautifulsoup 在 python 中抓取图像

使用 BeautifulSoup 和 Selenium 抓取一个网站的多个网页的内容

使用 beautifulsoup 和 selenium 抓取多页网站返回空字符串列表

如何使用 Python、Selenium 和 BeautifulSoup 从 HTML <span id> 中抓取此文本?

使用 BeautifulSoup 和 Selenium 的网页抓取网站不会检测网页中的表格元素

使用 Selenium 抓取 ESPN 数据

使用python和Beautifulsoup4从抓取数据中写入和保存CSV文件

使用BeautifulSoup和Requests和Pandas从<div>中的<span>抓取数据

使用 Python 和 BeautifulSoup 编辑字符串和抓取数据