Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 预测网站是否返回相同的内容_Python_Url_Web Crawler_Urllib2 - Fatal编程技术网

Python 预测网站是否返回相同的内容

Python 预测网站是否返回相同的内容,python,url,web-crawler,urllib2,Python,Url,Web Crawler,Urllib2,我正在写一个网络爬虫,但我有一个递归调用链接的函数问题。 假设我有一个页面:http://en.wikipedia.org/wiki/Stirling_numbers_of_the_second_kind。 我正在寻找所有链接,然后递归打开每个链接,再次下载所有链接等。 问题是,有些链接虽然具有不同的URL,但会驱动到同一页面,例如: http://en.wikipedia.org/wiki/Stirling_numbers_of_the_second_kind#mw-导航 提供与上一个链接相同

我正在写一个网络爬虫,但我有一个递归调用链接的函数问题。 假设我有一个页面:
http://en.wikipedia.org/wiki/Stirling_numbers_of_the_second_kind
。 我正在寻找所有链接,然后递归打开每个链接,再次下载所有链接等。 问题是,有些链接虽然具有不同的
URL
,但会驱动到同一页面,例如:
http://en.wikipedia.org/wiki/Stirling_numbers_of_the_second_kind#mw-导航
提供与上一个链接相同的页面。 我有一个无限循环


是否可以在不比较此页面的所有内容的情况下检查两个链接是否驱动到同一页面?

您可以存储以前看到的页面内容的哈希,并在继续之前检查该页面是否已被看到。

无需对同一页面提出额外请求

您可以使用并检查基本url的
.path
部分和您爬网的链接是否相同:

from urllib2 import urlopen
from urlparse import urljoin, urlparse
from bs4 import BeautifulSoup

url = "http://en.wikipedia.org/wiki/Stirling_numbers_of_the_second_kind"
base_url = urlparse(url)

soup = BeautifulSoup(urlopen(url))
for link in soup.find_all('a'):
    if 'href' in link.attrs:
        url = urljoin(url, link['href'])
        print url, urlparse(url).path == base_url.path
印刷品:

http://en.wikipedia.org/wiki/Stirling_numbers_of_the_second_kind#mw-navigation True
http://en.wikipedia.org/wiki/Stirling_numbers_of_the_second_kind#p-search True
http://en.wikipedia.org/wiki/File:Set_partitions_4;_Hasse;_circles.svg False
...
http://en.wikipedia.org/wiki/Equivalence_relation False
...
http://en.wikipedia.org/wiki/Stirling_numbers_of_the_second_kind True
...
https://www.mediawiki.org/ False

这个特定的示例用于解析wikipedia页面并获取所有链接,但是这里实际的html解析器并不重要。重要的是要解析链接并获取要检查的路径。

http://somepage
http://somepage#something
是同一页。散列符号之后的所有内容都是指向该页面锚的链接。谢谢,这真的很有帮助,因为我在程序中同时使用了urlparser和BeautifulSoup