一、用Urllib快速爬取网页
1. 爬取网页直接保存
通过调用urllib.request.urlretrieve直接将爬取的网页保存到对应的文件中。
filename = urllib.request.urlretrieve("http://www.baidu.com",filename = "e:/pythonchar/2.html")
2. 纯粹的爬取网页,简单思路如下:
1、 首先爬取一个网页并将爬取到的内同读取出来赋给一个变量。
2、 以写入的方式打开一个本地文件,并将名称命名为.html形式
3、 将1中的变量的值写入到打开的文件中
4、 关闭文件。
import urllib.request
file = urllib.request.urlopen("http://www.baidu.com")
data = file.read()
fhandel = open("e:/pythonchar/1.html","wb");
fhandel.write(data)
fhandel.close();
3. 超时设置
可以设置爬虫的响应时间,timeout取值为响应时间的长度在0-timeout之间。如果某个网页的响应时间过长,我们可以考虑网页爬取失败。
url = ('http://www.baidu.com')
for i inrange(1,100):
try:
file =urllib.request.urlopen(url,timeout=1)
data = file.read();
print(len(data))
except Exception as e:
print("出现异常->>>"+str(e)
4. 浏览器属性的模拟—Headers属性
目的:通过设置headers信息将我们的爬虫伪装成浏览器。
Headers的获取:
例如打开百度按F12进行查询headers信息:
获取User-Agent信息:
Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36Edge/17.17134
使用add_header()添加报头
1、 设置要爬取的网址,然后使用urllib.request.Request(url)创建一个Request对象,并保存到变量名req中。
2、 使用add_header的方法添加报头信息,Request对象名.add_header(字段名,字段值)
3、 使用urllib.request.urlopen(req)爬取网页
4、 将网页值保存到data中
5、 写入对应的html文件中
6、 爬取结束。
url = ('http://www.baidu.com')
headers = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134';
req = urllib.request.Request(url);
req.add_header('User-Agent',h