pandas - 使用 pandas/beautiful soup 抓取表数据(而不是慢的 Selenium?),BS 实现不起作用

标签 pandas selenium numpy selenium-webdriver beautifulsoup

我正在尝试抓取该网站上的网络数据,而我能够访问数据的唯一方法是迭代表的行,将它们添加到列表中(然后将它们添加到 pandas 数据框/写入 csv),然后单击下一页并重复该过程 [每次搜索大约 50 页,我的程序执行 100 多个搜索]。它非常慢/效率低下,我想知道是否有一种方法可以使用 pandas 或 beautiful soup 有效地添加所有数据,而不是迭代每行/列。

网址=“https://claimittexas.org/app/claim-search

rows = driver.find_elements_by_xpath("//tbody/tr")
    try:
        for row in rows[1:]:
            row_array = []
            #print(row.text) # prints the whole row
            for col in row.find_elements_by_xpath('td')[1:]:
                row_array.append(col.text.strip())
            table_array.append(row_array)
        df = pd.DataFrame(table_array)
        df.to_csv('my_csv.csv', mode='a', header=False)
    except:
        print(letters + "no table exists")

编辑:我尝试使用 BeautifulSoup 进行抓取,这是我在本周早些时候尝试过并发布的内容,但如果不使用 Selenium ,我似乎无法访问该表

在 bs 版本中,我放入了一堆 print 语句来查看问题所在,结果行值只是一个空列表

html = driver.page_source
soup = BeautifulSoup(html, 'lxml')
rows = soup.find('table').find('tbody').find_all(('tr')[1:])
for row in rows[1:]:
    cells = row.find_all('td')
    for cell in cells[1:]:
        print(cell.get_text())

最佳答案

在 BS4 代码实现中使用此行

rows = soup.find('table').find('tbody').find_all('tr')[1:]

而不是

rows = soup.find('table').find('tbody').find_all(('tr')[1:])

关于pandas - 使用 pandas/beautiful soup 抓取表数据(而不是慢的 Selenium?),BS 实现不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51111093/

相关文章:

python - 如何使用 selenium 从列表中选择一个项目?

java - 如何在 Android 版 appium 中使用 xpath 查找表格布局内的元素

python - Sympy 和 Numpy 无法反转使用 Sympy 创建的矩阵

具有条件的函数中的 Python- Numpy 数组

python - 在 numpy 中 reshape ndarray 与常规数组?

python - 如何将整个列表分配给 Pandas 数据框的每一行

python - Pandas DataFrames 充当另一个 DataFrame 的事件 View

testing - Selenium "StoreText"用于其他领域

python - 如何根据列中的所有或最后几个值检查数据框中的值是否满足条件并替换它?

Python:用底层分布替换值