Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.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/beautifulsoup解析html_Python_Html_Csv_Web Scraping_Beautifulsoup - Fatal编程技术网

*更新:如何用python/beautifulsoup解析html

*更新:如何用python/beautifulsoup解析html,python,html,csv,web-scraping,beautifulsoup,Python,Html,Csv,Web Scraping,Beautifulsoup,首先,我对Python非常陌生。我正在尝试从离线网站中获取联系信息,并将信息输出到csv。我想抓取页面url(不知道如何从html中做到这一点)、电子邮件、电话、位置数据(如果可能)、任何姓名、任何电话号码以及html站点的标记行(如果存在) 更新的#2代码: 此输出当前只返回行标题。我错过了什么?这至少应该是从html文件返回一些信息,也就是这个页面:这里(至少)有两个问题 首先,f是一个文件名,不是文件内容,也不是由这些内容制成的汤。因此,f.find('h2')将在文件名中查找'h2',

首先,我对Python非常陌生。我正在尝试从离线网站中获取联系信息,并将信息输出到csv。我想抓取页面url(不知道如何从html中做到这一点)、电子邮件、电话、位置数据(如果可能)、任何姓名、任何电话号码以及html站点的标记行(如果存在)


更新的#2代码:

此输出当前只返回行标题。我错过了什么?这至少应该是从html文件返回一些信息,也就是这个页面:

这里(至少)有两个问题

首先,
f
是一个文件名,不是文件内容,也不是由这些内容制成的汤。因此,
f.find('h2')
将在文件名中查找
'h2'
,这不是很有用

其次,大多数
find
方法(包括您正在调用的
str.find
)都返回索引,而不是子字符串。对该索引调用
str
,只会得到数字的字符串版本。例如:

>>> s = 'A string with an h2 in it'
>>> i = s.find('h2')
>>> str(i)
'17'
因此,您的代码执行如下操作:

>>> f = 'C:\\python\\training\\offline\\somehtml.html'
>>> headline = f.find('h2')
>>> str(headline)
'-1'
您可能希望调用
soup
对象上的方法,而不是
f
BeautifulSoup.find
返回一个汤的“子树”,这正是您想要在这里字符串化的

但是,如果没有示例输入,就不可能对其进行测试,因此我不能保证这是代码中唯一的问题

同时,当您遇到这样的问题时,您应该尝试打印中间值。打印出
f
,和
headline
,以及
headline2
,那么
headline3
错误的原因就更加明显了


只需在
find
调用中将
f
替换为
soup
,并修复缩进错误,然后针对示例文件运行即可

然而,它并没有做任何有用的事情。由于文件中的任何位置都没有
h2
标记,
headline
None
结尾。其他大多数领域也是如此。唯一能找到任何东西的是
url
,因为你要求它找到一个空字符串,它会找到任意的东西。使用三个不同的解析器,我得到了关于

或关于

您需要真正了解要解析的文件的结构,然后才能对其执行任何有用的操作。例如,在本例中,有一个电子邮件地址,但它位于标题为“email”
元素中,标题为“email”的
  • 元素的
    id
    为“email”。因此,您需要编写一个查找,根据其中一个条件或它实际匹配的其他条件来定位它。

    您通常无法从页面HTML获取页面URL;您需要在获取时保存此文件。至于其余的…我们需要看到一些示例数据来告诉您解析器出了什么问题。
    >>> f = 'C:\\python\\training\\offline\\somehtml.html'
    >>> headline = f.find('h2')
    >>> str(headline)
    '-1'