我正在尝试从抓取的链接中删除所有标记。
这是代码
request = urllib2.Request("http://sport.detik.com/sepakbola/")
response = urllib2.urlopen(request)
soup = BeautifulSoup.BeautifulSoup(response)
for a in soup.findAll('a'):
if 'http://sport.detik.com/sepakbola/read/' in a['href']:
urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', a)
不幸的是,它不起作用,并且它在findAll()中表示预期的字符串或缓冲区,它是否就像每个输出都不是字符串?任何帮助都将得到满足
感谢
答案 0 :(得分:2)
此处的代码缩进不正确。请修理它。将最后一行更改为:
urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', a['href'])
a
这里是<class 'bs4.element.Tag'>
类型,而不是字符串。所以你得到了错误。将其更改为a['href']
<type 'str'>
。
答案 1 :(得分:0)
a
不是字符串,它是字典(或者,特别是BeautifulSoup.Tag)。在您的if
语句中,您正确地从字典中获取href
字符串以进行比较,但在匹配正则表达式时,您不会。
在正则表达式匹配中简单地使用字符串a['href']
而不是字典a
将修复运行时错误;
for a in soup.findAll('a'):
if 'http://sport.detik.com/sepakbola/read/' in a['href']:
urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', a['href'])