我知道如何使用正则表达式查找特定页面上的链接:
import urllib2
import re
url = "www.something.com"
page = urllib2.urlopen(url)
html = page.read()
links = re.findall(r'"((http|ftp)s?://.*?)"', html)
但是,我无法弄清楚如何按照链接提取<p>
标签。我试过这个:
for link in links:
page += urllib2.urlopen(links)
html += page.read()
paragraphs = re.findall(r'(<p(.*?)</p>)', html)
for paragraph in paragraphs:
print paragraph[0], "\n"
应该怎么做?
(旁注:这是一个正则表达式问题,而不是BeautifulSoup问题。)
答案 0 :(得分:0)
您的代码段中似乎只有一些小的语法错误。当您使用re.findall
时,它会将括号中的表达式“捕获”为组,并将其作为每个匹配的一部分返回。因此,你的links
列表(得到它?)不是一个字符串数组,而是一个元组数组。如,
('https://s.yimg.com/os/mit/ape/w/d8f6e02/dark/partly_cloudy_day.png', 'http'), ('https://s.yimg.com/os/mit/ape/w/d8f6e02/dark/mostly_cloudy_day_night.png', 'http')
所以你可以通过以下方式更新你的for循环以忽略元组的第二部分:
for link, _ in links:
page += urllib2.urlopen(link)
html += page.read()
n.b。您在link
的拼写中也有拼写错误(您有links
)。括号中描述已保存组的段落也是如此。