python中的lxml和xpath:在可能缺少emai的列表中从html文档中获取h3和email对

2024-04-16 21:58:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我对这个很陌生,所以我真的不知道这是否可能:

此网页的标题在h3下,使用lxml很容易获得:

titles=doc.xpath("//div/h3/a/text())

下面是我的电子邮件:

^{pr2}$

我可以用“|”将它们合并到一个列表中:

both=doc.xpath("//div/h3/a/text()|//div/p[text()='Email: ']/a/text()")

问题是,有些结果没有电子邮件,所以我得到了一个坏列表,有些标题后面不是电子邮件,而是另一个标题,甚至没有空的列表项。我可以通过一些处理来解决这个问题,但是我想知道是否有可能在邮件丢失时返回一个“not found”,这样我就得到了一些可行的对:title email,title not found,等等

我试了一个我在这里找到的食谱:

emails=doc.xpath("concat(//div/p[text()='Email: ']/a/text(),substring('not-found',1 div not(//div/p[text()='Email: ']/a/text())))")

但这只适用于独立的电子邮件,如果我将其与“|”混合使用,则会出现xpathValeror:Invalid type错误。在

我试过了,记录在案:

emails=doc.xpath("//div/h3/a/text()|concat(//div/p[text()='Email: ']/a/text(),substring('not-found',1 div not(//div/p[text()='Email: ']/a/text())))")

我对lxml和xpath还很陌生,所以可能我错过了一个简单的方法。在


Tags: textdiv标题列表doctitle电子邮件email
1条回答
网友
1楼 · 发布于 2024-04-16 21:58:45

如果您没有被lxml困住,可以尝试BeautifulSoup。我发现它更容易使用。我查看了这个页面,但是无法很好地解析它,因为它在html头之前有一个xml头,比如:

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ES" xml:lang="ES" >
...

我不得不删除第一行(xml头)来测试它。上面说,这里有一个BeautifulSoup的例子:

^{pr2}$

它搜索所有具有class属性且值为resultados<div>元素,从其子元素中提取所有字符串,并忽略大小写删除在匹配email:之前找到的所有字符串。如果返回列表是空的,只需打印Not found,否则电子邮件将是列表中的第二个元素,所以提取它。在

运行方式如下:

python3 script.py

结果是:

MANUELA RIVERO - oscarvp30@hotmail.com
SALON DE BELLEZA LIDIA - Not found
TRUKO & HAIR DESIGN - Not found
PACO PERFUMERIAS - pacoperfumerias@gmail.com
ESTHER CENDAGORTAGALARZA ESTILISTA - peluqueriaesthercendagortagalarza@hotmail.es
ADARIS - adaris@hotmail.es
N&K NAILS - info@nknails.com
PELUQUERIA NELA - wrunela@hotmail.es
PELUQUERIA NELA - wrunela@hotmail.es
PELUQUERIA HUMBERTO STAR - humbertostar@yahoo.es
COLLADOS PELUQUEROS - contacta@colladospeluqueros.com
ZEN NATURE ESTéTICA - contacta@colladospeluqueros.com
LA CASA DE MAR - Not found
DELGADO PERRUQUERS - Not found
(...output cut to save space...)

相关问题 更多 >