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