html中标记项(类)的正则表达式

时间:2013-02-07 12:02:52

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

我对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”后跟任意数量的字符(数字,空格,字母,但不是新行字符) 提前谢谢你。

2 个答案:

答案 0 :(得分:0)

以下正则表达式查找所有“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"

答案 1 :(得分:0)

最后使用.,而不是使用点(.*),这意味着一个字符,这意味着任意数量的字符。这应该够了吧。所以你的代码将成为:

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