在网络抓取数据的过程中尝试访问网站上的某些值时遇到问题。问题是我要提取的文本在包含几个由标签分隔的文本的类中(这些正文标签也包含对我也很重要的文本)。
因此,首先,我尝试查找具有所需文本的标签(在这种情况下为“类别”),然后从该正文标签分配下方的文本中提取确切的类别。我可以使用精确的XPath,但是这里不是这样,因为我需要Web剪贴的其他页面在此侧边栏中包含不同数量的行,因此位置以及XPath都不同。
预期输出为“实用程序”-侧边栏中的类别。
我需要提取的网站和文本看起来像这样(在包含“类别”的侧边栏中直接查看:
该元素看起来像这样:
我尝试过的代码:
driver = webdriver.Safari()
driver.get('https://www.statsforsharks.com/entry/MC_Squares')
element = driver.find_elements_by_xpath("//b[contains(text(), 'Category')]/following-sibling")
for value in element:
print(value.text)
driver.close()
带有数据的页面链接是https://www.statsforsharks.com/entry/MC_Squares。
谢谢!
答案 0 :(得分:1)
在这里使用正则表达式可能会更好,因为整个文本位于“ company-sidebar-body”类下,其中只有一些文本位于b标记之间,而有些则不在b标记之间。
因此,您可以先添加类的文本:
sidebartext = driver.find_element_by_class_name("company-sidebar-body").text
这将为您提供以下内容:
“ EOY Proj销售:$ 1,000,000 \ r \ n上一个销售年:$ 200,000 \ r \ n类别:Utility \ r \ n问价\ r \ n权益:10%\ r \ n金额:$ 300,000 \ r \ n价值:$ 3,000,000 \ r \ n nEquity Deal \ r \ n鲨鱼:Kevin O'Leary \ r \ n股权:25%\ r \ n金额:$ 300,000 \ r \ n价值:$ 1,200,000 \ r \ n位:-$ 1,800,000“
然后您可以使用正则表达式来定位类别:
import re
c = re.search("Category:\s\w+", sidebartext).group()
print(c)
c将产生“ 类别:实用程序”,您可以随后使用它。如果其他页面上类别(“实用程序”)的值不同,这也将起作用。
答案 1 :(得分:1)
当它是MediaWiki网站时,有更简便的方法。例如,您可以使用JSON请求通过API访问页面数据,然后使用更为有限的DOM进行解析。
您想抓取我的网站的任何特殊原因?