1、最基本的抓站
import urllib2
content = urllib2.urlopen('http://xxxx').read()
2、使用代理服务器
这在某些情况下比较有用,比如IP被封了,或者比如IP访问的次数受到限制等等
import urllib2
proxy_support = urllib2.ProxyHandler({'http':'127.0.0.1:8087'})
opener = urllib2.build_opener(proxy_support,HTTPHandler)
urllib2.install_opener(opener)
content = urllib2.urlopen('http://xxxx').read()
使用本机8087端口代理访问
3、需要登录的网址
3.1 cookie的处理
import urllib2,cookielib
cookie_support = urllib2.HTTPCookieProcessor(cookielib.CookieJar)
opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
urllib2.install_opener(opener)
content = urllib2.urlopen('http://XXXX').read()
若同时使用代理和cookie,那么就在opener加上proxy_support,改为:
opener = urllib2.build_opener(proxy_support,cookie_support,urllib2.HTTPHandler)
3.2 表单的处理
对于一些需要登录的网页如何进行爬取呢?这里我们可以使用火狐的httpfox插件进行查看,这里登录网站进行查看表格
登录需要username/password/yzm等,我们接下来可以进行构造postdata
import urllib,urllib2
postdata = urllib.urlencode({
'username':'xxxx',
'password':'xxxx',
'yzm':''
})
req = urllib2.Request(url = 'http://xxxxx',data = postdata)
result = urllib2.urlopen(req).read()
3.3 伪装成浏览器进行访问
当然有些网站禁止我们进行爬虫,这时只要我们伪装成浏览器即可,通过修改http包中的header来实现
headers = {
'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'
}
req = urllib2.Request(
url = 'http://xxxx',
data = postdata,
headers = headers
)
3.4 反“反盗链”
反盗链就是我们发送的请求中header里面,判断referer站点是不是来自该网址,那么我们就在headers添加该网址就ok咯
headers = {
'Referer' = : 'http://xxxx'
}
headers是一个dict数据结构,我们可以放入任何想要的header,来做一些伪装。
4、多线程抓取
线程和进程
进程:程序的一次执行,都有自己的地址空间、内存。数据栈以及其他记录其运动轨迹的辅助数据
线程:所有线程运行在同一个进程当中,共享相同的运行环境。线程有开始顺序执行和结束三个部分
一般,使用线程有两种模式,一种是创建线程要执行的函数,把这个函数传递进Thread对象里,让他来执行,另一种是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的class里。
thread 提供基本的线程和锁定支持但是对于进程何时退出没有控制,当主线程结束时,所有其他线程也都强制结束,不会发出警告或者进行适当的处理
threading 提供更高几倍的功能更全的线程管理
Queue 可以创建一个队列数据结构,用于在多线程之间进行共享
thread模块中含函数和常量
import thread
thread.LockType #锁对象的一种,用于线程的同步
thread.error #线程的异常
thread.start_new_thread(function,args[,kwargs])
thread.exit() #线程退出函数
thread.allocate_lock() #生成一个未锁状态的锁对象
function:线程执行函数 args:线程执行函数的参数,类似tuple kwargs: 是一个字典,可选参数