【问题标题】:Web crawler that downloads all the links in a webpage下载网页中所有链接的网络爬虫
【发布时间】:2014-06-26 11:36:06
【问题描述】:

我是一个 python 初学者,并且已经编写了一个代码来下载指定 url 中的所有链接。有没有更好的方法来做到这一点,下面的代码是否正确?

#!/usr/bin/python3

import re
import requests

def get_page(url):
    r = requests.get(url)
    print(r.status_code)
    content = r.text
    return content

if __name__ =="__main__":
    url = 'http://developer.android.com'
    content = get_page(url)
    content_pattern = re.compile('<a href=(.*?)>.*?</a>')
    result = re.findall(content_pattern, content)
    for link in result:
        with open('download.txt', 'wb') as fd:
            for chunk in r.iter_content(chunk_size):
                fd.write(chunk)

【问题讨论】:

  • 代码 name__=="__main" 比较什么?这是什么意思?
  • 意思是;如果这个文件是一个模块,用于导入到另一个文件或程序的入口
  • 而且这段代码似乎是正确的,你要什么?
  • @myildirim 我如何指定 chunk_size ?
  • 这段代码 sn-p 使用 requests 模块,你可以在它的文档中找到你搜索的内容python-requests.org/en/v0.14.2/api

标签: python python-3.x web-scraping


【解决方案1】:

试试这个:

from bs4 import BeautifulSoup
import sys
import requests

def get_links(url):

    r = requests.get(url)
    contents = r.content

    soup = BeautifulSoup(contents)
    links =  []
    for link in soup.findAll('a'):
        try:
            links.append(link['href'])
        except KeyError:
            pass
    return links

if __name__ == "__main__":
    url = sys.argv[1]
    print get_links(url)
    sys.exit()

【讨论】:

    【解决方案2】:

    您可能想研究一下 linux wget 命令,它能够执行您想要的操作。如果你真的想要一个 python 解决方案,那么mechanizebeautiful soup 可以分别执行 HTTP 请求和解析 HTML。

    【讨论】:

    • 我想要一个 python 解决方案,漂亮的汤用于解析。有必要通过吗。为什么 r.text 还不够?
    • 您不想自己解析 HTML,尤其是不使用正则表达式。如果您使用适当的库,您将获得更可靠的结果。这个答案已经很好地涵盖了它:stackoverflow.com/a/1732454/170865
    • 谢谢,现在我提供的链接的网页正在下载,我无法获取网页中的链接,我的目标是下载这些链接中的内容。我该怎么做?
    猜你喜欢
    • 1970-01-01
    • 2016-05-26
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    相关资源
    最近更新 更多