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

如何使用beautifulsoup和selenium在Python抓取中识别类名或id

桑成荫
2023-03-14

我正在构建一个scraper代码,并且已经能够读取表和我想要的信息。问题在于下一个页面链接,我尝试使用类名和svg标记,但代码会随着类名值的更改而中断。

这是该页面的链接

翻页

代码运行点击下一页的元素css的代码如下

driver.find_element_by_css_selector('#root > div > div > main > div.ez6st4XksKUGZfGdvIhjV > section > div:nth-child(1) > div._1c5cPqlj4FoguvpKXSY69p > div > span:nth-child(3) > svg').click()

似乎当类名的值更改时,它会中断并更改要单击的元素,而我还没有找到一种方法在不更改元素的情况下重复,以便对具有相同结构的多个页面重复。

谢啦

共有2个答案

杜高谊
2023-03-14

您可以使用下面的行单击下一步按钮,而不引用动态类名:

driver.find_element_by_xpath('//span[@value]/following-sibling::span/*[name()="svg"]').click()

与CSS选择器相同:

driver.find_element_by_css_selector('span[value] + span > svg')

最新消息

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait

while True:
    try:
        wait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'span[value] + span > svg'))).click()
    except:
        break
西门奇希
2023-03-14

当您可以单击跨度时,也可以使用

from selenium import webdriver
d  = webdriver.Chrome()
url = 'https://super.walmart.com.mx/despensa/enlatados-y-conservas/chiles-enlatados/_/N-10kldy7?%2Fdespensa%2Fenlatados-y-conservas%2Fchiles-enlatados%2F_%2FN-10kldy7%3F%2Fdespensa%2Fenlatados-y-conservas%2Fchiles-enlatados%2F_%2FN-10kldy7%3F%2Fdespensa%2Fenlatados-y-conservas%2Fchiles-enlatados%2F_%2FN-10kldy7%3FNs=product.displayText%7C0&offSet=0&storeId=0000009999&No=40'
d.get(url)
# example number of clicks below
for i in range(2):
    d.find_element_by_xpath("//*[starts-with(@d,'M0')]/parent::*/parent::span").click()
 类似资料:
  • 问题内容: 我正在尝试从报纸(纽约时间)收集日期,标题和内容。 我有日期和标题,但没有完整的文章。下面是我用来抓取日期和标题的代码。 除了日期,标题外,我还想抓全文。 问题答案: 有可能的。您必须获取该文章的每个链接并将其拉出。我在下面添加了它,还整理了一下文章,因为有多余的空格,当您将它们全部合并在一起时,文本中没有空格。 输出:

  • 问题内容: 编程新手,并弄清楚了如何使用Selenium导航到我需要去的地方。我想立即解析数据,但不确定从哪里开始。有人可以握我的手几秒钟,并朝正确的方向指点我吗? 任何帮助表示赞赏- 问题答案: 假设您在要解析的页面上,Selenium将源HTML存储在驱动程序的属性中。这样,你会加载到如下:

  • 问题内容: 如果我想抓取一个需要先使用密码登录的网站,我该如何使用beautifulsoup4库开始使用python抓取它?以下是我对不需要登录的网站的处理方式。 应该如何更改代码以适应登录?假设我要抓取的网站是一个需要登录的论坛。一个示例是http://forum.arduino.cc/index.php 问题答案: 您可以使用机械化: 或urllib-使用urllib2登录网站

  • 问题内容: 我正在使用Python从网站上抓取内容。首先,我用和Python的,但我看到,该网站有一个按钮,通过JavaScript创建的内容,所以我决定使用。 假设我可以使用Selenium等方法找到元素并获取其内容,那么当我可以对所有内容都使用Selenium时,有什么理由要使用? 在这种特殊情况下,我需要使用Selenium来单击JavaScript按钮,以便更好地使用Selenium进行解

  • 问题内容: 在网站上,有在标顶部的几个环节,,,和。如果按下以数字标记的链接,它将动态地将一些数据加载到content中。如果被按下,它会用标签页,,,和第4页中的数据显示。 我想从按下的所有链接的内容中抓取数据(我不知道有多少,一次只显示3个,然后) 请举一个例子。例如,考虑网站www.cnet.com。 请指导我下载使用selenium的一系列页面,并自行解析它们以处理漂亮的汤。 问题答案:

  • 问题内容: 如何可靠地确定一个对象是否具有numpy类型? 我意识到这个问题与鸭子类型的哲学背道而驰,但是我们的想法是确保一个函数(使用scipy和numpy)永远不会返回一个numpy类型,除非使用numpy类型进行调用。 这是在另一个问题的解决方案中提出的,但是我认为确定对象是否具有numpy类型的一般问题与应将其分开的原始问题相距甚远。 问题答案: 使用内置函数获取类型,然后可以使用该属性找