爬虫的特殊设置
1.有关headers的设置
在访问网址的时候,网站会做出对于访问的限制,比如只能PC访问,手机访问等等。这时候需要我们来改变http请求时候的headers来更好的设法绕过限制。
User-Agent : 有些服务器或 Proxy 会通过该值来判断是否是浏览器发出的请求
Content-Type : 在使用 REST 接口时,服务器会检查该值,用来确定 HTTP Body 中的内容该怎样解析。
application/xml : 在 XML RPC,如 RESTful/SOAP 调用时使用
application/json : 在 JSON RPC 调用时使用
application/x-www-form-urlencoded : 浏览器提交 Web 表单时使用
在使用服务器提供的 RESTful 或 SOAP 服务时, Content-Type 设置错误会导致服务器拒绝服务
urllib可以这样来设置headers
value = {"key":"value","key2":"value2"}
data = urllib.urlencode(value)
url = "http://www.baidu.com"
headers = {'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}
request = urllib2.Request(url,data,headers)
response = urllib2.urlopen(request)
print response.read()
这样我们边可设置访问的headers,以便更好的绕过限制。
2.有关Proxy的设置
很多网址对爬虫也有限制,列入ip限制等来反爬虫。这时候就需要来用代理来突破这个限制。
import urllib2
proxy_handler = urllib2.ProxyHandler({"http" : 'http://127.0.0.1:8080'})
opener = urllib2.build_opener(proxy_handler)
urllib2.install_opener(opener)
这样便可设置代理
3.超时设置
区别有没有设置data
没有data设置的时候
response = urllib2.urlopen('http://www.baidu.com', timeout=10)
需要写明timeout属性
有设置data时候
response = urllib2.urlopen('http://www.baidu.com',data, 10)
4.DebugLog的使用
import urllib2
httpHandler = urllib2.HTTPHandler(debuglevel=1)
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)
opener = urllib2.build_opener(httpHandler, httpsHandler)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://www.baidu.com')
这样可以把Debug Log全部打印出来,方便调试
网友评论