我怎样才能有效地网上刮掉很大程度上未连接的线路呢?

时间:2015-05-06 00:18:46

标签: python python-2.7 web-scraping beautifulsoup

很抱歉,如果这是一个模糊的标题。我试图在一致的基础上削减XKCD网络漫画的数量。我看到http://xkcd.com/总是在首页上有他们最新的漫画,并在网站的下方有一条线说:

Permanent link to this comic: http://xkcd.com/1520/

其中1520是展出的最新漫画的编号。我想要抓住这个数字,但是,我找不到任何好方法。目前我的所有尝试都看起来很像hackish:

soup = BeautifulSoup(urllib.urlopen('http://xkcd.com/').read())
test = soup.find_all('div')[7].get_text().split()[20][-5:-1]

我的意思是.. 技术上有效,但如果网站上的任何内容被移动到最轻微,它可能会破坏。我知道必须有更好的方法在首页的某个部分内搜索http:xkcd.com/####/,然后返回####,但我似乎无法找到它。 Permanent link to this comic: http://xkcd.com/1520/行似乎有点漂浮,没有任何类型的标签,类或ID。任何人都可以提供任何帮助吗?

1 个答案:

答案 0 :(得分:1)

通常我坚持使用HTML解析器。在这里,由于我们正在寻找HTML中的特定文本(不检查任何标签),因此在应用正则表达式搜索时非常好:

Permanent link to this comic: http://xkcd.com/(\d+)/

保存组中的数字。

演示:

>>> import re
>>> import requests
>>> 
>>> 
>>> data = requests.get("http://xkcd.com/").content
>>> pattern = re.compile(r'Permanent link to this comic: http://xkcd.com/(\d+)/')
>>> print pattern.search(data).group(1)
1520