*更新:如何用python/beautifulsoup解析html
首先,我对Python非常陌生。我正在尝试从离线网站中获取联系信息,并将信息输出到csv。我想抓取页面url(不知道如何从html中做到这一点)、电子邮件、电话、位置数据(如果可能)、任何姓名、任何电话号码以及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',
更新的#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'