我基本上是从特定页面抓取数据。 我有这段代码:
regex = '<ul class="w462">(.*?)</ul>'
opener.open(baseurl)
urllib2.install_opener(opener)
... rest of code omitted ...
requestData = urllib2.urlopen(request)
htmlText = requestData.read()
pattern = re.compile(regex)
movies = re.findall(pattern, htmlText)
# Lines below will always returns empty.
if not movies:
print "List is empty. Printing source instead...", "\n\n"
print htmlText
else:
print movies
htmlText的内容:
<ul class="w462">
... bunch of <li>s (the content i want to retrieve).
</ul>
htmlText包含正确的源代码(我试图ctrl + F它,我可以验证它包含所需的ul元素。只是我的正则表达式无法获得所需的内容。
我试图改用它:
movies = re.findall(r'<ul class="w462">(.*?)</ul>', htmlText)
有谁知道出了什么问题?
答案 0 :(得分:2)
默认情况下,正则表达式中的.
匹配除换行符之外的任何字符。所以你的正则表达式不能匹配跨越多行(包含至少一个换行符)的任何内容。
将编译行更改为:
pattern = re.compile(regex, re.DOTALL)
更改.
的含义。使用re.DOTALL
,.
将匹配任何字符(包括换行符)。