我正在尝试抓取该网站上的网络数据,而我能够访问数据的唯一方法是迭代表的行,将它们添加到列表中(然后将它们添加到 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/