Python 使用正则表达式将属性解析的值与beautifulsoup匹配
嗨,来自笨拙的国家 我正在尝试解析一个论坛。更具体地说,是线程的名称 论坛引擎vbulletin提供的线程如下Python 使用正则表达式将属性解析的值与beautifulsoup匹配,python,regex,beautifulsoup,Python,Regex,Beautifulsoup,嗨,来自笨拙的国家 我正在尝试解析一个论坛。更具体地说,是线程的名称 论坛引擎vbulletin提供的线程如下 <a href="http://www.example.com/showthread.php?t=555555" id="thread_title_555555">NAME OF THE TITLE</a> 或者在伪Python中: for elements in soup.finAll("a", {"id": "thread_title_".*}):
<a href="http://www.example.com/showthread.php?t=555555" id="thread_title_555555">NAME OF THE TITLE</a>
或者在伪Python中:
for elements in soup.finAll("a", {"id": "thread_title_".*}):
print element.text
我尝试了几十种变体,但都没有用。我能做什么
提前感谢\D*\D{6}
这不符合你的要求吗?如果没有,你还试过什么
编辑:如果线程标题可以包含数字,则上述匹配将不匹配,因此考虑使用正则表达式\W*\d { 6 }
区别在于\D匹配所有非数字,而\w匹配任何字母、数字或下划线。您可以在调用findAll时将id与正则表达式匹配
您可以使用支持xpath查询的lxml,而不是beautifulsoup。使用XPath,您可以选择包含特定子字符串或以特定子字符串开头的属性。你需要辅导嗨,谢谢。我还有待审查lxml。然而,我有点精通,这还不够,正如你在beautifulsoup中看到的那样。我想让解析器的这一部分与它的其余部分兼容请展示你的其余代码嗨-thansk Juan Luis,我试图在这里与你非常相似:在vbulletin中查找标记metaData=soup.find_all:我试图收集讨论并将其导出为csv文件,其中包含线程标题、用户和帖子等行,其中后者是个人的论坛帖子同样,post数据存储在“postData=soup.find_alldd define”下,我们将在哪里存储信息标题=[]作者=[]次=[]帖子=[]请原谅我愚蠢的问题:我可以把正则表达式放在哪里?我猜在我的伪python示例中,我无法直接编写expression@downshift我想它应该是指soup.find_alla,{id:re.compile\D*\D{6}}}:print title.text中的title,因为我假设thread_title是一个通用术语,不是每次都要匹配,而是由单个标题替换,与之匹配的是\D*@MatthewStevenson,听起来不错,我让你回答OP的问题。谢谢@降档,现在我重读了这个问题,你可能是对的。看看OP怎么想谢谢大家。我想知道为什么id在其中起作用,而没有引号的id在@shammel lee answerThank@shammel lee中也起作用!我想问你们两个问题:1当我使用findAll时,属性必须在引号之间。为什么id没有引号?B如何识别它?2.重新编译生成一个模式对象。如果该对象中表示的条件不是“无”,则应用循环条件并执行其命令。我说得对吗?再次感谢!嗨,thansk,我正试图在vbulletin中找到标签metaData=soup.find_all:我正试图收集讨论并将其导出为csv文件,其中包含诸如线程标题、用户和帖子等行,其中后者是来自个人的实际论坛帖子同样,post数据存储在“postData=soup.find_alldd”下定义我们将在何处存储信息标题=[]作者=[]次=[]帖子=[]aria属性的语法是什么?那是什么标签?我正在尝试使用与模式匹配的aria标签获取跨度。
for elements in soup.finAll("a", {"id": "thread_title_".*}):
print element.text
for element in soup.findAll("a", id=re.compile("^thread_title_")):
print element.text