当前位置: 首页 > 知识库问答 >
问题:

硒(Python)在抓取数据时卡住

魏彦
2023-03-14

我试图抓取亚马逊的一些产品,但是当程序抓取的时候卡住了。这是代码:

from selenium import webdriver
import time
import pandas as pd
import openpyxl
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
options.add_argument('--start-maximized')

driver = webdriver.Chrome(r'C:\chromedriver.exe', options = options)
driver.get("https://www.amazon.es/")

buscador = driver.find_element_by_xpath('/html/body/div[1]/header/div/div[1]/div[2]/div/form/div[3]/div[1]/input')
buscador.send_keys('Tarjetas gráficas', Keys.RETURN) # Searches 'Tarjetas gráficas' (graphic cards) on Amazon

btn_cookies = driver.find_element_by_xpath('/html/body/div[1]/span/form/div[2]/span[1]/span').click() # Accept cookies

lista_nombres = [] # List of product's names
lista_precios = [] # List of product's prices
n = 0

for j in range(7):
    n += 1
    s = 0
    time.sleep(1)

    try: # This try-except is because when the program doesn't find more items it sends an error, then it should stop scraping.
        while True:
            try:
                driver.get('https://www.amazon.es/s?k=Tarjetas+gráficas&page={}'.format(n))
                WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, '//*[@id="search"]/div[1]/div/div[1]/div/span[3]/div[2]/div[' + str(s) + ']/div/span/div/div/div/div/div[2]/h2/a')))
                btn_articulo = driver.find_element_by_xpath('//*[@id="search"]/div[1]/div/div[1]/div/span[3]/div[2]/div[' + str(s) + ']/div/span/div/div/div/div/div[2]/h2/a').click()
                WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'productTitle')))
                nombre = driver.find_element_by_id('productTitle')
                WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'priceblock_ourprice')))
                precio = driver.find_element_by_id('priceblock_ourprice')
                driver.get('https://www.amazon.es/s?k=Tarjetas+gráficas&page={}'.format(n))
                WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'a-size-base-plus.a-color-base.a-text-normal')))

                lista_nombres.append(nombre)
                lista_precios.append(precio)
                print(len(lista_nombres)) # I print de length of the two lists to see if the program is scraping the data
                print(len(lista_precios))
                s += 1
            except:
                s += 1
                driver.get('https://www.amazon.es/s?k=Tarjetas+gráficas&page={}'.format(n))
                driver.set_page_load_timeout(10) 
    except:
        print('Finished')



df = pd.DataFrame({'Nombre':lista_nombres, 'Precio':lista_precios})
print(df)

df.to_excel('Tarjetas gráficas Amazon.xlsx', index = False)

time.sleep(5)
driver.close()

这是输出:

1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10
11
11
12
12

正如你所看到的,当它到达产品编号12时,它卡在那里,但是,它没有发送任何错误信息或任何东西。我不知道该怎么办,我需要帮助。谢了。

共有1个答案

邢飞白
2023-03-14

我认为你应该重新考虑使用而True,你也应该记住,除了在之外尝试会捕获所有错误,从而无法退出

 类似资料:
  • 在我的硕士论文中,我正在探索通过web自动化从网站中提取数据的可能性。步骤如下: 登录网站(https://www.metal.com/Copper/201102250376) 输入用户名和密码 单击登录 将日期更改为2020年1月1日 刮取生成的表格数据,然后将其保存到csv文件中 用我电脑上的特定名称保存到特定文件夹 运行相同的序列,在同一浏览器窗口的新选项卡中下载其他材料的其他历史价格数据

  • 我正试图从这个网页上抓取数据 http://stats.espncricinfo.com/ci/engine/stats/index.html?class=1;团队=5人;模板=结果;类型=击球 我需要从表中复制内容并将其放入csv文件中,然后转到下一页并将这些页面的内容附加到同一文件中。我可以刮表,但是当我尝试使用SeleniumWebDriver的click循环单击next按钮时,它会转到下一

  • 大家好,我是Python新手。请让我知道如何使用BeautifulSoup从下面的代码部分删除数据。 外面看起来像这样 问:哪个是世界领先的产蛋国? 中国 印度 日本 马来西亚

  • 本文向大家介绍python+mongodb数据抓取详细介绍,包括了python+mongodb数据抓取详细介绍的使用技巧和注意事项,需要的朋友参考一下 分享点干货!!! Python数据抓取分析 编程模块:requests,lxml,pymongo,time,BeautifulSoup 首先获取所有产品的分类网址: 我们在产品分类的同时需要确定我们所访问的地址是产品还是又一个分类的产品地址(所以需

  • 本文向大家介绍Python抓取京东图书评论数据,包括了Python抓取京东图书评论数据的使用技巧和注意事项,需要的朋友参考一下  京东图书评论有非常丰富的信息,这里面就包含了购买日期、书名、作者、好评、中评、差评等等。以购买日期为例,使用Python + Mysql的搭配进行实现,程序不大,才100行。相关的解释我都在程序里加注了: from selenium import webdriver f

  • 问题内容: 我正在做一个项目,我需要做很多屏幕抓取工作,以尽可能快地获取大量数据。我想知道是否有人知道任何好的API或资源来帮助我。 顺便说一下,我正在使用Java。 到目前为止,这是我的工作流程: 连接到网站(使用来自Apache的HTTPComponents) 网站包含一个带有一堆我需要访问的链接的部分(使用内置的Java HTML解析器来弄清楚我需要访问的所有链接是什么,这很烦人且凌乱的代码