[python 爬虫]我的第一个爬虫(3)

链接爬虫 我们为了遍历网站上所有的内容,我们需要让爬虫表现的像普通用户,跟踪链接,访问感兴趣的内容,通过跟踪链接的方式,我们可以很容易地下载整个网站的页面,但是这种方法会下载我们不需要的网页,比如我们想要再接下来的网站里抓取索引页面,可是它也有可能抓取到了国家的页面内容,我们怎么办呢?我们以http://example.webscraping.com作为实例,我们发现,所有的索引内容的网址都是在/places/default/index的根目录下,需要通过正则表达式来确定哪些内容需要抓取: def link_crawler(seed_url, link_regex):#regex里面是正则表达式需要抓取的页面     crawl_queue = [seed_url]     while crawl_queue:         url = crawl_queue.pop()         html = download(url).text         for link in get_links(html):             #匹配该链接是不是我想要爬取得内容             if re.match(link_regex, link):       […]

[python爬虫]我的第一个爬虫程序(1)

下载网页: 想要爬取网页,我们需要做的第一件事就是把这个网页下载下来,接下来演示的是通过requests模块来进行网页的下载: import requests def download(url):     print(’downloading:’, url)     html = requests.get(url)     return html 在这里我们可以给出一个更加完整的版本,我们在这个函数增加了一个新的功能,那就是当我们的请求出现遇到异常时,我们的函数会捕获到异常,打印出出现的错误代码,并且返回None: import requests def download(url):     print(’downloading:’, url)     html = requests.get(url)     if html.status_code != requests.codes.ok:         e = html.status_code         print(’Download error:’, e)     […]

[python 爬虫]requests的高阶用法

Session函数的用法 Session 函数可以保存相关变量,如此我们便可以在每次提交数据的时候不需要重复输入变量(其中保存的变量就包含cookies)所以我们来试试吧! s = requests.Session() s.get(’http://httpbin.org/cookies/set/sessioncookie/123456789’) r = s.get(’http://httpbin.org/cookies’) print(r.text) # ‘{"cookies": {"sessioncookie": "123456789"}}’ 当然我们也可以自定义一些参数来用到Session里面来: s = requests.Session() s.auth = (’user’, ‘pass’) s.headers.update({’x-test’: ‘true’}) # both ‘x-test’ and ‘x-test2′ are sent s.get(’http://httpbin.org/headers’, headers={’x-test2′: ‘true’}) 但是这里要注意到的是通过以下方式的自定义参数不能够在下一次请求之中使用: s = requests.Session() r = s.get(’http://httpbin.org/cookies’, cookies={’from-my’: ‘browser’}) print(r.text) # ‘{"cookies": {"from-my": "browser"}}’ r = s.get(’http://httpbin.org/cookies’) print(r.text) # ‘{"cookies": […]

[python爬虫]requests库 2

解码请求内容 我们以Github的网址再来举例子,我们可以读取服务器下传给我们的内容: >>> import requests >>> r = requests.get(’https://api.github.com/events’) >>> r.text u'[{“repository”:{“open_issues”:0,”url”:”https://github.com/… 我们的函数一般会自动解码从服务器上下载的内容, 通过调用r.encoding参数也可以自行更改解码格式: >>> r.encoding ‘utf-8’ >>> r.encoding = ‘ISO-8859-1′ 当然,我们也可以通过二进制来解码内容: >>> from PIL import Image >>> from io import BytesIO >>> i = Image.open(BytesIO(r.content)) 通过json解码也同样可行: >>> import requests >>> r = requests.get(’https://api.github.com/events’) >>> r.json() [{u’repository’: {u’open_issues’: 0, u’url’: ‘https://github.com/… 这里要注意,我们成功获得json文件并不代表我解码成功,因为一些网站返回给你的可能就是错误的信息 自定义http头字段(headers) : 我们可以将头字段的一些参数放到一个字典当中,那样再通过get调用就十分便利,那么我们为什么要自定义头字段呢?因为一些网站有反爬虫机制,会禁止默认的用户代理访问,这一点我们可以在网站中的robots.txt文件中看到: […]

[python爬虫]requests库 1

requests库在爬取数据的过程中久负盛名,很多网站上评论说比urllib, urllib2不知道高到哪个地方去了,那么这篇文章呢,主要是想要总结一下requests库的基本用法,当然,如果有可能的话,我在来进行一下实践操作~ 首先当然需要在命令行中安装requests库: pip install requests 发送我的第一个请求: import requests r = requests.get(’https://api.github.com/events’) 通过这么简简单单的几步操作,我们就轻而易举的将这个网站所有的内容存放到r这个变量当中了,有没有很简单,当然我们可以通过以下几个实例来看看如何通过request进行post,put,delete,head,options等等诸如此类的操作,说到这儿,我认为有必要为大家介绍一下什这些操作到底是什么: 这些功能统称为HTTP的请求方法 GET: GET请求会显示请求指定的资源。一般来说GET方法应该只用于数据的读取,而不应当用于会产生副作用的非幂等的操作中。GET会方法请求指定的页面信息,并返回响应主体,GET被认为是不安全的方法,因为GET方法会被网络蜘蛛(就是我们)等任意的访问。 HEAD: HEAD方法与GET方法一样,都是向服务器发出指定资源的请求。但是,服务器在响应HEAD请求时不会回传资源的内容部分,即:响应主体。这样,我们可以不传输全部内容的情况下,就可以获取服务器的响应头信息。HEAD方法常被用于客户端查看服务器的性能。 POST: POST请求会 向指定资源提交数据,请求服务器进行处理,如:表单数据提交、文件上传等,请求数据会被包含在请求体中。POST方法是非幂等的方法,因为这个请求可能会创建新的资源或/和修改现有资源。 PUT: PUT请求会身向指定资源位置上传其最新内容,PUT方法是幂等的方法。通过该方法客户端可以将指定资源的最新数据传送给服务器取代指定的资源的内容。 >>> r = requests.post(‘http://httpbin.org/post’, data = {‘key’:’value’}) >>> r = requests.put(‘http://httpbin.org/put’, data = {‘key’:’value’}) >>> r = requests.delete(‘http://httpbin.org/delete’) >>> r = requests.head(‘http://httpbin.org/get’) >>> r = requests.options(‘http://httpbin.org/get’) 这里也许就有人会问; 后面的data的内容到底是什么呀,其实这就是我们要post或者put上去的内容啊,就相当于传输文件一样,这甚至有可能是我们要传输的文件路径,在使用amazon watson一些服务,比如图片识别等方法,你要写一个python的程序需要用到这个服务,那么这就是再好不过的方法了,你只需把他给你的网址拷贝下来,按照他的格式通过这些请求来进行编程,不过这些都是后话了。 向URL传输参数: 我们向url传输参数(比如用户名,密码)有一个很直观的方式,那就是在网址的‘?’后面加入你要传输的参数,比如  httpbin.org/get?key=val […]