Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 网络垃圾电话号码_Python_Csv_Web Scraping_Beautifulsoup_Lxml - Fatal编程技术网

Python 网络垃圾电话号码

Python 网络垃圾电话号码,python,csv,web-scraping,beautifulsoup,lxml,Python,Csv,Web Scraping,Beautifulsoup,Lxml,首先,我是一个编程新手,我的英语不是最好的 我在Windows10Pro上使用Python3.6 经过一些尝试和错误,我终于想出了如何通过lxml从网页中删除数据,以及如何使用beautifulsoup和csv将其添加到excel工作表中 到目前为止,这对我来说是可行的。收集姓名、地址和距离的列表非常容易。但当我试图提取电话号码和电子邮件时,我遇到了麻烦。经过一些研究,我发现他们把电话号码分开,并对其进行了编码。电子邮件也有点棘手 我要从中提取数据的网页是: 我发现电话号码的第一部分在这里:

首先,我是一个编程新手,我的英语不是最好的

我在Windows10Pro上使用Python3.6

经过一些尝试和错误,我终于想出了如何通过lxml从网页中删除数据,以及如何使用beautifulsoup和csv将其添加到excel工作表中

到目前为止,这对我来说是可行的。收集姓名、地址和距离的列表非常容易。但当我试图提取电话号码和电子邮件时,我遇到了麻烦。经过一些研究,我发现他们把电话号码分开,并对其进行了编码。电子邮件也有点棘手

我要从中提取数据的网页是:

我发现电话号码的第一部分在这里:

<span class="nummer">(02271) 6 79</span>
(02271)6 79
他们把其余的藏在这里:

<span class="suffix encode_me telSelector128028047679_2623072" data-telselector="telSelector128028047679_2623072" data-telsuffix="IDcw"> 70</span>
70
即使第一部分看起来很简单,我也不能像以前那样使用lxml来提取它

所以我的问题是,如果初学者仍然可以提取电话号码和电子邮件


或者我应该尝试从打印的PDF文件中获取这些号码吗?

尝试以下解决方案以获取电话号码:

import requests
from lxml import html

source = html.fromstring(requests.get("https://www.gelbeseiten.de/schluesselfertigbau/bergheim,,,,,umkreis-50000").text)
phone_number = "".join([text_node for text_node in source.xpath('//li[@class="phone"]//text()') if text_node.strip()])
print(phone_number)
输出:


我很难理解你的问题。您是否在询问是否可以从HTML属性中提取数字?当然尝试一下,让我们看看它是如何失败的——我们很乐意提供帮助!为了说明这一点,完整的电话号码应该是
(02271)67970
?@M.T.是的。这就是我需要它的方式,更糟糕的是:电话号码的最后一部分没有出现在下载的html中:它是在DOM修改下载后用javascript编写的。这意味着您不能仅通过
urllib.request
BeautifulSoup
直接获得它。换言之,他们不希望你从机器人上使用他们的页面……你好,塞奇,还有其他方法吗?with:
import re with open('text.txt')作为fp:lines=fp.read().split(“\n”)
im从“strg-a”复制的文本中获取一个包含完整数字的列表。但是我不知道如何过滤列表中的电话号码。我尝试了正则表达式,但无法提供所需的模式……或者,使用
文本内容
源代码.xpath('//li[@class=“phone”]')[0]。文本内容().strip()
。是的,我也尝试过,但得到了
。(02271)6 79\n\t\t\t\t 70'
。可能输出只是从我的角度来看的,因为我并没有真正用
请求测试它,而是用从浏览器开发工具复制的HTML示例测试它……感谢您的快速响应。但我的输出看起来略有不同:“(02271)679(02181)2700(02161)2419(02131)6667(02103)3900(02173)2047(02235)92304(02232)423(0157)868574(02181)27811(02181)47490(02202)188(0211)2380(02235)9230”我如何将它们划分到一个列表中?为什么缺少后缀(例如70)?@DanielHe,正如评论中已经提到的,最后的数字来自JavaScript,提供的方法可能只适用于静态页面。您可能需要使用selenium才能处理动态内容。。。
'(02271) 6 79 70'