跟随正则表达式的链接

时间:2016-04-19 05:27:34

标签: python regex python-2.7

我知道如何使用正则表达式查找特定页面上的链接:

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问题。)

1 个答案:

答案 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)。括号中描述已保存组的段落也是如此。