使用beautifulSoup,我想获得与某些href相关联的字符串,其中包含“/ genre /”。例如,我使用以下命令获得以下href:
soup.find_all('a', href=True)
输出是:
<a href="/genre/Animation?ref_=tt_stry_gnr"> Animation</a>,
<a href="/genre/Adventure?ref_=tt_stry_gnr"> Adventure</a>,
<a href="/genre/Family?ref_=tt_stry_gnr"> Family</a>,
<a href="/title/tt0235917/parentalguide?ref_=tt_stry_pg#certification"> See all certifications</a>,
<a href="/title/tt0235917/parentalguide?ref_=tt_stry_pg" itemprop="url"> View content advisory</a>,
但是,我想选择 only “genre”作为链接并获取输出:
Animation
Adventure
Family
我尝试使用:
import re
imdb_page.find_all('a', {'href': re.compile(r'/genre/\d.*')})
但我得到一个空数组。有任何想法吗?
答案 0 :(得分:1)
你在正则表达式中有错误,它应该是
>>> for a in soup.find_all('a', {'href': re.compile(r'^/genre/.*')}):
... print a.text
...
Animation
Adventure
Family
正则表达式解释
^
将模式锚定在字符串的开头,
/genre/
匹配genre
.*
匹配任何内容
/genre/\d.*
\d
匹配任何数字。那就是你试图匹配/genre/
之后的数字(如href="/genre/1qwert"
)。
但是在输入字符串中,没有href
遵循此模式。
因此你得到一个空字符串。