【问题标题】:Regular expression for tag item (class) in htmlhtml中标签项(类)的正则表达式
【发布时间】:2013-01-22 22:12:49
【问题描述】:

我对 python 和编程相当陌生 ;-),我正在编写一个程序来从网站上抓取数据,该网站只有 1 页有 6000 多行,而我将抓取大约 20000数以千计的。我正在使用 python 2.7.4

我看过一些关于如何使用正则表达式的教程,但它对我不起作用。 我正在使用 Beautiful Soup 来查找特定的标签,实际上我需要找到这样的标签:

<tr class="room_loop_counter1 maintr">
<tr class="room_loop_counter1 extendedRow">
<tr class="room_loop_counter2 maintr odd">
<tr class="room_loop_counter2 extendedRow odd">
<tr class="room_loop_counter3 maintr">
<tr data-occupancy="2" class="room_loop_counter1 ">
<tr data-occupancy="2" class="room_loop_counter2 odd">
<tr data-occupancy="3" class="room_loop_counter3 ">
<tr data-occupancy="3" class="room_loop_counter4 odd">

等等。我不确定 room_loop_counter1,3 之后引号前面的空格。

我正在尝试编写一个适合下一行代码的表达式:

soup = BeautifulSoup(html_part)

av = soup.find_all('tr', class_=REGULAR_EXP)

REGULAR_EXP = re.compile('"room_loop_counter"\d\s.')

但我显然为类写了错误的正则表达式

如何写一个有效的? 我想它应该是一个表达式,它找到所有“room_loop_counter”后跟任意数量的字符(数字、空格、字母,但不是换行符) 提前谢谢你。

【问题讨论】:

  • 不要使用正则表达式解析 HTML,使用 DOM 库。

标签: html regex python-2.7 web-scraping beautifulsoup


【解决方案1】:

以下正则表达式查找所有“room_loop_counter”后跟任意数量的字符(数字、空格、字母,但不是换行符)

room_loop_counter[A-Za-z\d\s]*

您的正则表达式 "room_loop_counter"\d\s. 匹配 "room_loop_counter"(注意括起来的引号)后跟一个数字,后跟一个空格,然后是任何字符。

所以它匹配 "room_loop_counter"1 x"room_loop_counter"3 ! 但不匹配 "room_loop_counter1"

【讨论】:

    【解决方案2】:

    不要使用点(.),表示一个字符,最后使用.*,表示任意数量的字符。这应该够了吧。所以你的代码会变成:

    REGULAR_EXP = re.compile('"room_loop_counter"\d\s.*')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-23
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 2011-05-03
      相关资源
      最近更新 更多