网络爬虫1--网络的访问
网络模块urllib;
包含四个模块:request,error,
解码:str=htmlstr.decode("utf-8");
response(对象)=urllib.request.urlopen(url[,....])
或者是:req()对象=urllib.request.Request(urlstring);
response(对象)=urllib.request.urlopen(req).
即:urlopen的url参数可以为一个字符串或者一个request独像。当为字符串时系统帮助做下面的两句话。
str(字符串,二进制型)=response.read();
对于response:
.geurl(),返回访问的连接地址。
.info().返回HTTPMESSAGE.
.getcode().
网络爬虫2--图片下载
需要明确的是,图片等多媒体文件也是由二进制组成。
图片下载,需要先open一个文件,然后写入;
例如:with open('cat.jpg','wb') as f:
f.write(response);
网络爬虫3--在线翻译
1.url中data参数。
data=urllib.parse.urlencode(data).encode('utf-8').此utf-8的确定根据具体要访问的网站的源码编码格式进行设置
python默认的编码格式为unicode
response=urllib.request.urlopen(url.data)
html=reponse.read().decode('utf-8').解码
//json数据格式解析
jsondict(字典格式)=json.loads(html)
根据jsondict具体形式获得想要的数据。对于字典中套字典情况,可以用多重[][][]获取。
网络爬虫4--隐藏
1.模拟正常浏览器访问
urlopen中的url实际上是一个Request对象。所以对于自定义head,的两种方式:
其中需注意的是;heads是一个字典。
方法一:
head={}
head['User-Agent']="string".string复制浏览器显示的。
req=urllib.request.Request(url,data,head)
方法二:
req=urllib.request.Request(url,data)
req.add_head('User-Agent','string').
2.提交频率
方法一:延迟提交时间
import time
time.sleep(5).五秒钟
方法二:使用代理
1.创建一个代理字典:
字典格式:{‘类型’:‘代理ip:端口号’}
proxy=urllib.request.ProxyHandler({})
2.定制,创建一个opener
opener=urllib.request.build_opener(proxy)
3.安装opener
urllib.request.install_open(opener)
4.调用opener
opener.open(url)
3.隐藏总结:
opener.addheaders=[{'User-Agent','str'}]
其余同上
4.对于单个线程来说,每次只能访问一个连接,所以直接将ip:port做成一个列表,然后随机取出。
random.choice(列表)