简单的页面下载-----爬虫伊始

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Oh_my_godness/article/details/86552521

学习之路特别无聊,想着练习的时候记录一下,这样最起码看着自己学过,要不然以后忘了都感觉自己白学了。

python实现爬取页面的功能其实很简单,就是通过python自带的库urllib中的request,然后将页面内容写入到一个文件当中,然后可以在本地通过浏览器打开,这就是简单的爬取页面。

废话不说,来点代码感受一下:


from urllib import request

def f(url):
    print("URL : %s " %url)
    resp = request.urlopen(url)
    data = resp.read()
    f = open('url.html','wb')
    f.write(data)
    f.close()
    print('%d bytes received from %s.' % (len(data), url))

if __name__ == '__main__':
    url = 'https://blog.csdn.net/Oh_my_godness/article/details/84572933'
    f(url)

这个代码呢就是将该链接匹配的网页下载到当前目录的url.html中

但是一般爬取页面不会一个一个去爬取,太费劲了,对于我们这种那么懒得程序员,怎么可能忍受,当然要偷懒了,所以这就面对这大量的页面爬取,今天先不说线程,说一种很高效的‘协程’,也就是一个线程中遇见IO进行切换的操作,给人感受上达到了线程并行的功能,也更快的完成页面内容爬取。那就来点代码看看喽:

from urllib import request
import gevent
from gevent import monkey
monkey.patch_all()
def f(url):
    print('URL : %s' %url)
    resp = request.urlopen(url)
    data = resp.read()

    print('%d bytes received from %s.' % (len(data), url))

gevent.joinall([
    gevent.spawn(f,'https://blog.csdn.net/oh_my_godness'),
    gevent.spawn(f, 'https://blog.csdn.net/Oh_my_godness/article/details/84453915'),
    gevent.spawn(f,'https://blog.csdn.net/Oh_my_godness/article/details/84572933')
])

这里面的gevent,帮助该功能更快的实现请求的响应,这里的monkey如果没有的话,会感受收跟同步的是没有的区别的,主要原因是urllib该库在执行的过程中,gevent不能自动扫描出其中的IO操作,也就是不能切换,二monkey就给当前程序所有的IO操作都做了标记,可以让gevent发现,然后进行切换,实行效果上得‘并行’。

展开阅读全文

没有更多推荐了,返回首页