gpt4 book ai didi

不使用 HTML 标签的 Pyparsing 问题抓取网站

转载 作者:行者123 更新时间:2023-12-02 00:24:25 24 4
gpt4 key购买 nike

我正在尝试使用 pyparsing 来解析来自网站的信息,但是,我发现的所有示例主要使用 HTML 标记来识别不同的文本位。

例如,以下内容很难通过使用 HTML 标记来分隔(该程序不适用于本网站)。我如何拆分作者、标题等?

import urllib

from pyparsing import *

paraStart,paraEnd = makeHTMLTags("p")

# read HTML from a web page
serverListPage = urllib.urlopen( "http://www.cs.cf.ac.uk/contactsandpeople/allpubs.php?emailname=C.L.Mumford" )
htmlText = serverListPage.read()
serverListPage.close()

para = paraStart + SkipTo(paraEnd).setResultsName("body") + paraEnd


for tokens,start,end in para.scanString(htmlText):
print tokens.body,'->',tokens.href

我对 pyparsing 比较陌生,并且浏览了书籍和网络以寻找这方面的例子。任何帮助将非常感激。谢谢。

编辑:当我运行程序时,我得到以下信息: 跳到内容 跳转到导航菜单

但是,如果我更改为从 ("p") 搜索到 ("li") 以查找不同的站点,它会将信息提取到一个 block 中。

最佳答案

您必须对要从中抓取数据的网页的内容了解更多。如果你只是盲目地在页面上使用标签-标签解析器,你只会得到随机的文本 block 。

尝试打印出整个页面的 HTML(您的脚本在变量 htmlText 中捕获),然后开始在文本中寻找指向您感兴趣的数据的模式。数据本身可能是模式,没关系。 <> 中的文本位s 是 HTML 标签——pyparsing 包含 makeHTMLTags 的原因方法是标签内的文本结构可以疯狂地变化,具有可选和意外的属性,或意外顺序的属性,或意外的大写/小写,或意外的空格 - makeHTMLTags涵盖了所有这些内容,这就是为什么大多数使用 pyparsing 编写的网络抓取工具都使用该方法来帮助定义获取有趣数据的模式的原因。

试试这个过程:打印出 htmlText在纸上。使用蓝色荧光笔突出显示您想要的数据。然后使用黄色荧光笔标识周围的数据或有助于定位该数据的标签。现在你有了一个关于如何构建你的 pyparsing 表达式来提取数据的模板。您已经开始使用结果名称(解析器中的“正文”定义)——这是一个好习惯,请继续保持。用结果名称标记蓝色文本的所有表达式,以便在匹配整体模式后,您可以使用名称来获取各个位。

祝你好运!

关于不使用 HTML 标签的 Pyparsing 问题抓取网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9415947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com