在多个页面中解析特定值

时间:2016-07-20 00:34:43

标签: python web-scraping beautifulsoup

我有以下代码,目的是解析多个页面中每个页面的特定信息。多个页面中的每个页面的http都是结构化的,因此我使用此结构同时收集所有链接以进行进一步解析。

import urllib
import urlparse
import re
from bs4 import BeautifulSoup

Links = ["http://www.newyorksocialdiary.com/party-pictures?page=" + str(i) for i in range(2,27)]

此命令为我提供了一个http链接列表。我进一步读书并制作汤。

Rs = [urllib.urlopen(Link).read() for Link in Links]
soups = [BeautifulSoup(R) for R in Rs]

由于这些是我想要的汤,我无法实现最终目标 - 解析结构<a href= ""> </a>。例如,

<a href="/party-pictures/2007/something-for-everyone">Something for Everyone</a>

我特别想获得这样的事情:'/party-pictures/2007/something-for-everyone'。但是,下面的代码不能用于此目的。

As = [soup.find_all('a', attr = {"href"}) for soup in soups]

有人能告诉我哪里出了问题吗?非常感谢您的帮助。谢谢。

2 个答案:

答案 0 :(得分:1)

  

我特别想获得这样的东西:&#39; / party-pictures / 2007 / something-for-everyone&#39;。

     

接下来将是正则表达式!!

您不一定需要使用正则表达式,而且据我所知,您可以使用BeautifulSoup过滤掉所需的链接:

[[a["href"] for a in soup.select('a[href*=party-pictures]')] 
 for soup in soups]

例如,这会在party-pictures内为您提供href的链接列表。 *=表示&#34;包含&#34;,select()是一个CSS选择器搜索。

您也可以使用find_all()并应用regular expression filter,例如:

pattern = re.compile(r"/party-pictures/2007/")
[[a["href"] for a in soup.find_all('a', href=pattern)] 
 for soup in soups]

答案 1 :(得分:0)

这应该有效:

As = [soup.find_all(href=True) for soup in soups]

这应该给你所有的href标签

如果您只想要名称为'a'的href,那么以下内容将起作用:

As = [soup.find_all('a',href=True) for soup in soups]