使用美丽汤筛刮

时间:2019-03-26 15:20:12

标签: python html web-scraping beautifulsoup

我正在尝试从网站中提取一些信息。我需要点击“ 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”标签内的链接。

1 个答案:

答案 0 :(得分: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()

有效,因为它正在执行操作,但您尝试分配。我假设您想转到一个新页面。如果您可以澄清这一点。我将通过从a标记元素中收集链接以按需使用来替换该步骤。

否则,您始终可以使用以下方式收集webElement

elems = browser.find_elements_by_css_selector(".dataLiquidTable .dataOff a")