Python爬虫接单:Python网络爬虫:连接超时

我试图实现一个简单的网络爬虫,我已经写了一个简单的代码开始:有两个模块fetcher.pycrawler.py

fetcher.py:

    import urllib2
    import re
    def fetcher(s):
    "fetch a web page from a url"
    try:
            req = urllib2.Request(s)
            urlResponse = urllib2.urlopen(req).read()
    except urllib2.URLError as e:
            print e.reason
            return
    p,q = s.split("//")
    d = q.split("/")
    fdes = open(d[0],"w+")
    fdes.write(str(urlResponse))
    fdes.seek(0)
    return fdes
    if __name__ == "__main__":
    defaultSeed = "http://www.python.org"
    print fetcher(defaultSeed)

爬虫.py:

from bs4 import BeautifulSoup
import re
from fetchpage import fetcher    
usedLinks = open("Used","a+")
newLinks = open("New","w+")
newLinks.seek(0)
def p(fd,var=0):
        soup = BeautifulSoup(fd)
        for li in soup.find_all("a",xxx=re.compile("http")):
                newLinks.seek(0,2)
                newLinks.write(str(li.get("href")).strip("/"))
                newLinks.write("\n")
        fd.close()
        newLinks.seek(var)
        link = newLinks.readline().strip("\n")
        return str(link)
def crawler(seed,n):
        if n == 0:
                usedLinks.close()
                newLinks.close()
                return
        else:
                usedLinks.write(seed)
                usedLinks.write("\n")
                fdes = fetcher(seed)
                newSeed = p(fdes,newLinks.tell())
                crawler(newSeed,n-1)
if __name__ == "__main__":
        crawler("http://www.python.org/",7)

问题是,当我运行crawler.py它工作正常的前 4-5 个链接,然后挂起,一分钟后给我以下错误:

[Errno 110] Connection timed out
   Traceback (most recent call last):
  File "crawler.py", line 37, in <module>
    crawler("http://www.python.org/",7)
  File "crawler.py", line 34, in crawler
    crawler(newSeed,n-1)        
 File "crawler.py", line 34, in crawler
    crawler(newSeed,n-1)        
  File "crawler.py", line 34, in crawler
    crawler(newSeed,n-1)        
  File "crawler.py", line 34, in crawler
    crawler(newSeed,n-1)        
  File "crawler.py", line 34, in crawler
    crawler(newSeed,n-1)        
  File "crawler.py", line 33, in crawler
    newSeed = p(fdes,newLinks.tell())
  File "crawler.py", line 11, in p
    soup = BeautifulSoup(fd)
  File "/usr/lib/python2.7/dist-packages/bs4/__init__.py", line 169, in __init__
    self.builder.prepare_markup(markup, from_encoding))
  File "/usr/lib/python2.7/dist-packages/bs4/builder/_lxml.py", line 68, in     prepare_markup
     = UnicodeDammit(markup, try_encodings, is_html=True)
  File "/usr/lib/python2.7/dist-packages/bs4/.py", line 191, in __init__
    self._detectEncoding(markup, is_html)
  File "/usr/lib/python2.7/dist-packages/bs4/.py", line 362, in _detectEncoding
    xml_encoding_match = xml_encoding_re.match(xml_data)
TypeError: expected string or buffer

任何人都可以帮助我,我很新的 python,我无法找出为什么它说连接超时一段时间后?

0

Connection Timeout不是特定于 python 的,它只是意味着您向服务器发出请求,并且服务器在您的应用程序愿意等待的时间内没有响应。

这可能发生的原因很可能是 python.org 可能有一些机制来检测它何时从脚本中获取多个请求,并且可能在 4-5 个请求后完全停止服务页面。

0

您可以尝试使用来避免在如上所述的多个请求中被检测到。您可能希望查看此答案,以了解如何使用发送 urllib 请求:How to open website with urllib via Proxy - Python

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(141)
Python滑动窗口算法:滑动窗口算法(4 by 4 sliding window price)
上一篇
Center m:如何使用sklearn在Python中将 N* M矩阵居中
下一篇

相关推荐

  • python 大文件处理:如何使用Python处理大型文件

    Python 大文件处理指的是处理超过内存可以容纳的大文件。这种情况下,我们可以使用 Python 的内置函数 open() 来打开文件,并使用 read() 或 readlines() 来读取文件内容,以及 write() 来写入文件内容。…

    2023-08-11 13:08:46
    0 38 54
  • python培训心得体会:学习Python,拓展自我的可能性

    示例示例参加python培训,我受益匪浅。我深刻体会到了python的强大之处,它是一种高效、易学、易用的编程语言,可以让我们快速的实现编程思想,有效的提升编程效率。我也深刻理解了python的语法特点,比如变量、函数、类、模块等,以及它们之间的关系,这对以后的编程工作有很大的帮助。我还学习到了如何使用python进行数据处理,以及如何使用python实现web应用,这些都非常有用。下面是一个简单的python代码示例,用来计算1到100的和:…

    2023-07-19 02:14:49
    0 47 66
  • python求质因数:Python实现质因数分解的算法

    Python求质因数是指把一个正整数分解成若干个质数的乘积,这些质数就是该数的质因数。下面是一个Python代码实现求质因数的例子:…

    2023-03-04 13:27:16
    0 68 47
  • python基础问题:如何使用Python提高编程效率

    示例示例Python基础问题:如何在Python中定义函数答:在Python中定义函数的语法如下:def):…

    2023-07-19 07:08:57
    0 51 95
  • python面向:如何使用Python面向对象编程

    Python面向对象是一种面向对象编程(OOP)的范例,它能够让你创建可重用的代码,这样你就可以在构建应用程序时使用它们。下面是一个简单的Python面向对象的示例:…

    2023-04-01 09:37:30
    0 95 92
  • python计算1到100的和5050

    Python计算1到100的和的代码如下:上面的代码使用for循环来遍历1到100的数字,每次将遍历到的数字加到sum中,最后输出sum的值即可。…

    2023-10-03 12:08:18
    0 22 48
  • python 列表元素替换:使用Python创建美丽的图像

    Python 列表元素替换是指将列表中的某个元素替换成另一个元素,可以使用列表的 index() 方法和 insert() 方法来实现。…

    2023-08-29 09:24:30
    0 39 65
  • python prod函数:如何使用Python函数prod来提高生产效率

    Python prod 函数是一个内置函数,用于计算可迭代对象中元素的乘积。它接受一个可迭代对象作为参数,并返回该可迭代对象中元素的乘积。…

    2023-02-09 14:50:30
    0 52 45

发表评论

登录 后才能评论

评论列表(73条)