【发布时间】:2018-06-18 16:44:19
【问题描述】:
我的任务是从 HTML 表格的每一行中提取一些项目。我已经想出了如何使用 Selenium 和 Python 从网络上抓取整个表格。以下是代码:
from selenium import webdriver
import time
import pandas as pd
mydriver = webdriver.Chrome('C:/Program Files/chromedriver.exe')
mydriver.get("https://www.bseindia.com/corporates/ann.aspx?expandable=0")
time.sleep(5) # wait 5 seconds until DOM will load completly
table = mydriver.find_element_by_xpath('//*[@id="ctl00_ContentPlaceHolder1_lblann"]/table/tbody')
for row in table.find_elements_by_xpath('./tr'):
print(row.text)
我无法理解如何从桌子上抓取特定物品。以下是我需要的物品:
公司名称
PDF链接(如果不存在,写“无PDF链接”)
接收时间
推定时间
花费时间
说明
逻辑方面的任何帮助都会有所帮助。 提前致谢。
【问题讨论】:
-
除非需要使用 Selenium,否则您可以仅使用 BeautifulSoup 解析所有数据,因为数据不是使用 Javascript 动态加载的。
-
例如
table = soup.find('table', attrs={'cellpadding':"4", 'cellspacing':"1", 'width':"100%", 'border':"0"})会获取整个表,然后用table.find_all('tr')获取表中的每一行。例如row.find('td', attrs={'class': "TTHeadergrey"}将获得项目 1、2-6。row.find('a', attrs={'class':"tablebluelink"})['href']将获得 PDF 链接。 -
如果有没有PDF链接的公司公告,我如何验证事实,我需要添加“没有PDF链接”。我实际上正在制作一张我收集的所有物品的表格。因此,我需要与表中正确公司链接的正确 PDF 链接。由于中间会有一些随机公司没有PDF链接,我不明白如何处理该错误并确保我在网页上没有PDF链接的公司旁边写了“没有PDF链接”。跨度>
-
我也按照你告诉我的方式做了。这在列表中给了我额外的“无 PDF 链接”。这是我使用的逻辑:
s = soup.find_all('td', {'class' : 'TTHeadergrey'}) for item in s: if not item.has_attr('style') 而不是 item.has_attr ('valign'): pdf.append("No PDF Link") else: for i in item.select('a'): if i.has_attr('href') and '.pdf' in i['href' ]: pdf.append(i['href']) -
如果我想明智地做到这一点,我该怎么做?
标签: python selenium web-scraping