我有以下代码,目的是解析多个页面中每个页面的特定信息。多个页面中的每个页面的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]
有人能告诉我哪里出了问题吗?非常感谢您的帮助。谢谢。
答案 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]