我需要使用selenium刮取多个联系人页面以获取python中的电子邮件地址。它们的布局和站点结构都不同,因此我必须提出一种非常动态的XPATH模式来查找地址。
另一个障碍是地址有时是纯文本,有时是href mailto:
到目前为止,我的模式还可以工作:
email = driver.find_elements_by_xpath("//*[text()[contains(.,'@')]]").text
但是如果多个数据存储在同一div
中则不起作用
它还返回元素列表,但我只需要电子邮件。如果我使用find_element_by_xpath
,根本没有文字。
例如,如果您尝试抓取此网站,例如:http://schandorf.at/service/kontakt/
因此,如果您有任何提示,请告诉我!
答案 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