利用python3写爬虫,因为python3已经没有了urllib2,仅有urllib,区别就在于urllib2相当于urllib.request,调用urllib2的方法时可以通过urllib.request调用。
爬取百度首页时,收集到消息之后要对信息进行解码,发现编码方式为gb2312,运用decode方法进行解码,得到首页源代码。
关于http请求头信息,推荐使用浏览器插件SwitchyOmega进行代理,之后用Fiddler进行抓包分析,从而提取出头部的基本信息。
# -*- coding:utf-8 -*-
import urllib.request as urllib2
# user_agent是爬虫与反爬虫斗争的第一步
ua_headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0',
}
# 通过Request()方法构造一个请求对象
url = r'https://www.baidu.com//'
request = urllib2.Request(url, headers = ua_headers)
print(request.headers,request.type,request.data)
# 向指定的url地址发送请求,并返回服务器响应的类文件对象
response = urllib2.urlopen(request)
# 服务器返回的类文件对象支持python文件对象的操作方法
html = response.read()
print(html.decode('gb2312'))
还可以更加高级一点的构造user-agent,利用random模块随机的选择列表中的信息。
代码如下:
# -*- coding:utf-8 -*-
import urllib.request as urllib2
import random
url = r'http://www.baidu.com/'
# 用于模拟http头的User-agent
ua_list = [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv2.0.1) Gecko/20100101 Firefox/4.0.1",
"Mozilla/5.0 (Windows NT 6.1; rv2.0.1) Gecko/20100101 Firefox/4.0.1",
"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11",
"Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"
]
user_agent = random.choice(ua_list)
request = urllib2.Request(url=url)
# 将头添加进去
request.add_header('User-Agent', user_agent)
# 输出获取的头部信息中的user-agent 要注意User-agent的写法
print(request.get_header('User-agent'))
写爬虫最关键的便是与反爬虫之间的斗争,因而我们要养成良好的习惯,学会构造头部。