Python使用requests来抓取网页

文章转载自:http://www.yangyanxing.com/?p=1079

1. requests介绍

  早就听说requests的库的强大,只是还没有接触,今天接触了一下,发现以前使用urllib,urllib2等方法真是太搓了……
  这里写些简单的使用初步作为一个记录

一、安装python的requests模块,使用pip或easy_install都可以

二、发送无参数的get请求

r = requests.get('http://httpbin.org/get')
print r.text
{
  "args": {},
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Connection": "close",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.3.0 CPython/2.6.6 Windows/7",
    "X-Request-Id": "8a28bbea-55cd-460b-bda3-f3427d66b700"
  },
  "origin": "124.192.129.84",
  "url": "http://httpbin.org/get"
}

三、发送带参数的get请求,将key与value放入一个字典中,通过params参数来传递,其作用相当于urllib.urlencode

import requests
pqyload = {'q':'杨彦星'}
r = requests.get('http://www.so.com/s',params = pqyload)
r.url
u'http://www.so.com/s?q=%E6%9D%A8%E5%BD%A6%E6%98%9F'

四、发送post请求,通过data参数来传递,

payload = {'a':'杨','b':'hello'}
r = requests.post("http://httpbin.org/post", data=payload)
print r.text
{
  "args": {},
  "data": "",
  "files": {},
  "form": {
    "a": "u6768",
    "b": "hello"
  },
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Connection": "close",
    "Content-Length": "19",
    "Content-Type": "application/x-www-form-urlencoded",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.3.0 CPython/2.6.6 Windows/7",
    "X-Request-Id": "c81cb937-04b8-4a2d-ba32-04b5c0b3ba98"
  },
  "json": null,
  "origin": "124.192.129.84",
  "url": "http://httpbin.org/post"
}

可以看到,post参数已经传到了form里,data不光可以接受字典类型的数据,还可以接受json等格式

payload = {'a':'杨','b':'hello'}
import json
r = requests.post('http://httpbin.org/post', data=json.dumps(payload))

五、发送文件的post类型,这个相当于向网站上传一张图片,文档等操作,这时要使用files参数

url = 'http://httpbin.org/post'
files = {'file': open('touxiang.png', 'rb')}
r = requests.post(url, files=files)
5.1 定制headers,使用headers参数来传递
import json
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
headers = {'content-type': 'application/json'}
r = requests.post(url, data=json.dumps(payload), headers=headers)

六、响应内容

6.1 响应状态码
r = requests.get('http://httpbin.org/get')
print r.status_code
6.2 响应头
print r.headers
{'content-length': '519', 'server': 'gunicorn/18.0', 'connection': 'keep-alive', 'date': 'Sun, 15 Jun 2014 14:19:52 GMT', 'access-control-allow-origin': '*', 'content-type': 'application/json'}
也可以取到这个个别的响应头用来做一些判断,这里的参数是不区分大小写的
r.headers[‘Content-Type’]
r.headers.get(‘Content-Type’)
6.3 响应内容,前面已经在应用了
r.text
r.content

七、获取响应中的cookies

r = requests.get('http://www.baidu.com')
r.cookies['BAIDUID']
'D5810267346AEFB0F25CB0D6D0E043E6:FG=1'
也可以自已定义请求的COOKIES
url = 'http://httpbin.org/cookies'
cookies = {'cookies_are':'working'}
r = requests.get(url,cookies = cookies)
print r.text
{
  "cookies": {
       "cookies_are": "working"
  }
}
cookies还有很多,因为目前我也还不是很多,以后再扩充吧

八、使用timeout参数设置超时时间

requests.get('http://github.com', timeout=1)
<Response [200]>
如果将时间设置成非常小的数,如requests.get('http://github.com', timeout=0.001),那么如果在timeout的时间内没有连接,那么将会抛出一个Timeout的异常

九、访问中使用session

先初始化一个session对象,s = requests.Session()
然后使用这个session对象来进行访问,r = s.post(url,data = user)
参考文章 http://blog.csdn.net/iloveyin/article/details/21444613 基本上都是从这扒的代码

2. 爬虫实例

  以下通过访问人人网来获取首页中的最近来访问,然后再访问查看更多的来访来读取更多的最近来访
更多的来访就是以带session的访问http://www.renren.com/myfoot.do

#coding:utf-8
import requests
import re

url = r'http://www.renren.com/ajaxLogin'

user = {'email':'email','password':'pass'}
s = requests.Session()
r = s.post(url,data = user)

html = r.text
visit = []
first = re.compile(r'</span><span class="time-tip first-tip"><span class="tip-content">(.*?)</span>')
second = re.compile(r'</span><span class="time-tip"><span class="tip-content">(.*?)</span>')
third = re.compile(r'</span><span class="time-tip last-second-tip"><span class="tip-content">(.*?)</span>')
last = re.compile(r'</span><span class="time-tip last-tip"><span class="tip-content">(.*?)</span>')
visit.extend(first.findall(html))
visit.extend(second.findall(html))
visit.extend(third.findall(html))
visit.extend(last.findall(html))
for i in visit:
    print i

print '以下是更多的最近来访'
vm = s.get('http://www.renren.com/myfoot.do')
fm = re.compile(r'"name":"(.*?)"')
visitmore = fm.findall(vm.text)
for i in visitmore:
    print i

时间: 2024-09-17 12:56:47

Python使用requests来抓取网页的相关文章

python使用自定义user-agent抓取网页的方法_python

本文实例讲述了python使用自定义user-agent抓取网页的方法.分享给大家供大家参考.具体如下: 下面python代码通过urllib2抓取指定的url的内容,并且使用自定义的user-agent,可防止网站屏蔽采集器 import urllib2 req = urllib2.Request('http://192.168.1.2/') req.add_header('User-agent', 'Mozilla 5.10') res = urllib2.urlopen(req) html

python 自动提交和抓取网页_python

下面是用python写的,使用lxml来做html分析,从网上看到的,说是分析速度最快的哦,不过没有验证过.好了,上代码. 复制代码 代码如下: import urllib import urllib2 import urlparse import lxml.html def url_with_query(url, values): parts = urlparse.urlparse(url) rest, (query, frag) = parts[:-2], parts[-2:] return

编码-python抓取网页,网页源码无法解码

问题描述 python抓取网页,网页源码无法解码 抓取的网页:http://esf.nanjing.fang.com/ 浏览器查看源码显示content="text/html; charset=gb2312" python chardet 结果显示{'confidence': 0.0, 'encoding': None} 通过page=page.decode('gb2312','ignore').encode('utf-8'),解码后print为乱码 求问应该如何对这个网页的源代码进行

用Python程序抓取网页的HTML信息的一个小实例

  这篇文章主要介绍了用Python程序抓取网页的HTML信息的一个小实例,用到的方法同时也是用Python编写爬虫的基础,需要的朋友可以参考下 抓取网页数据的思路有好多种,一般有:直接代码请求http.模拟浏览器请求数据(通常需要登录验证).控制浏览器实现数据抓取等.这篇不考虑复杂情况,放一个读取简单网页数据的小例子: 目标数据 将ittf网站上这个页面上所有这些选手的超链接保存下来. 数据请求 真的很喜欢符合人类思维的库,比如requests,如果是要直接拿网页文本,一句话搞定: ? 1 d

Python urllib、urllib2、httplib抓取网页代码实例

  这篇文章主要介绍了Python urllib.urllib2.httplib抓取网页代码实例,本文直接给出demo代码,代码中包含详细注释,需要的朋友可以参考下 使用urllib2,太强大了 试了下用代理登陆拉取cookie,跳转抓图片...... 文档:http://docs.python.org/library/urllib2.html 直接上demo代码了 包括:直接拉取,使用Reuqest(post/get),使用代理,cookie,跳转处理 ? 1 2 3 4 5 6 7 8 9

求教如何通过python抓取网页中表格信息

问题描述 求教如何通过python抓取网页中表格信息 刚刚开始学习python 不清楚如何通过python抓取网页中的表格信息 比如给定一个student.html 里面有学号.姓名.性别等信息 怎么样写才能够输入学号 读出其他信息? 解决方案 用正则表达式,表格数据放在table->tr->td中 解决方案二: 输入学号然后服务器在给你其他数据,应该是一个post的过程-你可以抓包看一下整个过程-至于提取特定的信息,你可以先看下整个表格的结构,再有针对性的写个正则表达式来提取出信息- 解决方

python抓取网页图片

# -*- coding: utf-8 -*- #--------------------------------------- # 程序:网页图片抓取 # 作者:lqf # 日期:2013-08-10 # 语言:Python 2.7 # 功能:抓取网页jpg链接图片 #--------------------------------------- import re import string import sys import os import urllib url="http://tie

用Python编写网络爬虫(一):抓取网页的含义和URL基本构成

一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛. 网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址, 然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止. 如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来. 这样看来,网络爬虫就是一个爬行程序,一个抓

ython-如何欺骗服务器,可以无限制的抓取网页!!!

问题描述 如何欺骗服务器,可以无限制的抓取网页!!! 大家好: 我现在想抓去一个网页,但是不想被服务器发现,应该怎么样做? 感觉CSDN的服务器做的就挺好的,我自己尝试的抓网页但是次数一旦多了,就不行了! 网络上的一些在python中添加浏览器头的信息,本人昨晚刚试过,也不是很给力! 有没有比较好的方法!比如:自动变IP之类的方法! 求各位大神指导! 解决方案 找一个能自动重启路由器的软件,填写路由器用户名和密码不就搞定了,只是重启的过程断网会导致采集程序无法采集部分数据 解决方案二: 只要你做