使用美丽的汤筛网刮

问题描述 投票:0回答:1

我试图从网站上提取一些信息。我需要点击“a”标签内的链接。我能够找到标签。但是当我试图点击它时。我收到一个名为'NoneType'的错误,该对象不可调用。

from selenium import webdriver
import time
from bs4 import BeautifulSoup
import pandas as pd

browser = webdriver.Chrome()
browser.get("url")
browser.find_element_by_class_name('formButton').click()
soup = BeautifulSoup(browser.page_source, 'html.parser')

embargo = soup.find_all(class_="dataOff")

for row in embargo:
    cells = row.find_all("td")
    rail = cells[0].get_text().strip()
    embargo = cells[1].find_element_by_class_name('dataOff').click()

这是HTML标签,我希望点击美丽的汤。

<table class="dataLiquidTable">
<tr id = "headerRow> .... </tr>
<tr class = "dataOff">
<td> AO </td>
<td> <a href="url"> </a> </td>

代码应单击“a”标记内的链接。

python html web-scraping beautifulsoup
1个回答
0
投票

尝试下面的目标第一个孩子a标签与元素与表dataOff在表中

browser.find_element_by_css_selector(".dataLiquidTable .dataOff a").click()

看起来你可能想要多个链接,在这种情况下首先尝试并提取链接(希望它们是有效的Urls)

links = [item.get_attribute('href') for item in browser.find_elements_by_css_selector(".dataLiquidTable .dataOff a")]
for link in links:
    browser.get(link)

然后,您将使用代码开头的信息加入从这些页面获得的信息。假设返回列表的长度相同。

我不确定

embargo = cells[1].find_element_by_class_name('dataOff').click()

是有效的,因为它正在执行一个动作,但你尝试一个任务。我想你想去一个新的页面。如果你能澄清一下。通过从标签元素中收集链接以根据需要使用,我正在替换该步骤。

否则,您始终可以收集webElements

elems = browser.find_elements_by_css_selector(".dataLiquidTable .dataOff a")
© www.soinside.com 2019 - 2024. All rights reserved.