我正在尝试学习如何使用BeautifulSoup进行屏幕刮擦。
from urllib import urlopen
from BeautifulSoup import BeautifulSoup
import re
webpage = urlopen('http://feeds.feedburner.com/zenhabits').read()
patFinderTitle = re.compile('<h4 class="itemtitle"><a href=(.*)</a></h4>')
findPatTitle = re.findall(patFinderTitle,webpage)
listIterator = []
listIterator[:] = range(1, 5)
for i in listIterator:
print findPatTitle[i]
print("\n")
错误
Traceback (most recent call last):
File "//da-srv1/users/xxxxx/Desktop/fetcher", line 14, in <module>
print findPatTitle[i]
**IndexError: list index out of range**
答案 0 :(得分:3)
使用以下表达式:
patFinderTitle.findall(webpage)
由于re.findall(re.compile(<expression>), <string>)
只接受正则表达式作为字符串,因此不能执行re.findall
的等效操作 - re.compile(<expression>)
返回已编译的正则表达式对象。因此,您需要使用已编译的正则表达式对象patFinderTitle
并调用其findall()
方法(参见上文)。
re.findall(re.compile(<expression>), <string>)
。你知道的越多。
答案 1 :(得分:2)
你省略了read()函数调用的括号,所以网页是一个函数,而不是一个字符串。
webpage = urlopen('http://feeds.feedburner.com/zenhabits').read()