爬取西刺代理流程图
背景
- 环境:python3.6
- 模块:
- urllib.request(获取html)
- chardet(判断html的编码)
- bs4.Beautiful(提取代理IP)
- github地址
(https://github.com/tonyxinminghui/spider/blob/master/xici_spider.py)
获取html
难点
- 选择用什么模块获取html
- 西刺代理的网址不伪造header是无法获取正确的html的。一般会返回503
- python3内存中字符串的编码是Unicode的形式,我们一般获取的html都是编码过的,我们需要解码。
- 3引出4,如何判断html的编码。
解决方案
由于自己异常稀少的知识储量,选择了urllib.request(PS:网上大家都说requests是为人类写的模块,很多方法名都很人性化,可惜我不是很熟悉,以后有机会可以,用request重写一下。)
有关伪造header,urllib.request中相关的接口是
class urllib.request.Request(url[, data][, headers][, origin_req_host][, unverifiable])
这里列一下header的形式,具体接口参数,详见参考forged_header = { 'User-Agent': XXXX, 'Referer' : XXXX, 'Host' : spider_data['host'],