【问题标题】:How can I dependably web-scrape a largely unattached line effectively?我怎样才能有效地可靠地抓取大部分未连接的线路?
【发布时间】:2015-05-06 00:18:46
【问题描述】:

对不起,如果这是一个模糊的标题。我试图在一致的基础上抓取 XKCD 网络漫画的数量。我看到http://xkcd.com/ 总是在首页上放着他们最新的漫画,并在网站下方写着:

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

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

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

我的意思是.. 在技术上 是可行的,但如果网站上的任何内容稍有变动,它可能会严重损坏。我知道必须有更好的方法来在首页的 a 部分中搜索 http:xkcd.com/####/ 并返回 #### 但我似乎找不到它。 Permanent link to this comic: http://xkcd.com/1520/ 行似乎有点飘来飘去,没有任何类型的标签、类或 ID。任何人都可以提供任何帮助吗?

【问题讨论】:

    标签: python python-2.7 web-scraping beautifulsoup


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2014-11-03
      • 2018-09-03
      • 2017-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-09
      • 2017-12-18
      • 1970-01-01
      相关资源
      最近更新 更多