使用硒的电子邮件抓取的XPath

时间:2020-05-30 11:31:34

标签: python selenium-webdriver xpath

我需要使用selenium刮取多个联系人页面以获取python中的电子邮件地址。它们的布局和站点结构都不同,因此我必须提出一种非常动态的XPATH模式来查找地址。

另一个障碍是地址有时是纯文本,有时是href mailto:

到目前为止,我的模式还可以工作:

email = driver.find_elements_by_xpath("//*[text()[contains(.,'@')]]").text

但是如果多个数据存储在同一div中则不起作用 它还返回元素列表,但我只需要电子邮件。如果我使用find_element_by_xpath,根本没有文字。

例如,如果您尝试抓取此网站,例如:http://schandorf.at/service/kontakt/

因此,如果您有任何提示,请告诉我!

1 个答案:

答案 0 :(得分:1)

对于您的每个页面,您都可以尝试类似的操作(例如您发布的网站的示例):

emailA = driver.find_elements_by_xpath("//div[@id='col3']//p[contains(.,'@')]").text
emailA_fix = re.search('E-Mail: (.+?)[A-Z]',value).group(1)
emailB = driver.find_elements_by_xpath("//a[contains(@href,'mailto:')]").get_attribute("href")

email = emailA_fix + emailB

emailA =搜索文本格式的电子邮件地址; email B =搜索以mailto格式的电子邮件地址

对于emailA,我们使用正则表达式(re.search)提取邮件地址。

输出:post@schandorf.bgld.gv.at

使用LXML或Scrapy,您可以使用单个XPath表达式来支持页面的多种结构:

 //div[@id='col3']//text()[contains(.,'Mail')]|//a[contains(@href,"mailto:")]/@href