4.2urllib.parse4.2.1url编码解码url只能由特定字符(字母、数字、下划线)组成。如果出现其他字符,如¥、空格、中文等,必须进行编码,否则无法发送请求。urllib.parse.unquote是url解码函数,将url中非字母、数字、下划线的utf8编码%XXX解码成相关字符。urllib.parse.quote是一个url编码函数,将非字母、数字、下划线转换成对应的utf8编码,格式为%XXX。示例代码我们使用的链接中经常会包含中文,比如:“https://segmentfault.com/sear...”,这样的链接需要经过编码才能发送请求。importurllib.parseurl='https://segmentfault.com/search?q=markdown%E8%AF%AD%E6%B3%95'unencd=urllib.parse.unquote(url)print(unencd)encd=urllib。parse.quote(unencd)print(encd)的输出是:https://segmentfault.com/search?q=markdown语法https%3A//segmentfault.com/search%3Fq%3Dmarkdown%E8%AF%AD%E6%B3%954.2.2参数拼接URL经常需要传递参数。在抓取网页的时候,需要将这些参数拼接成特定的格式,一些非字母、数字、下划线等必须转换成相应的代码。urllib.parse.urlencode将参数拼接成query_string,将非字母、数字、下划线转换成对应的code。示例代码data={'name':'小A','age':'15','sex':'Male'}query_string=urllib.parse.urlencode(data)print(query_string)输出为:name=%E5%B0%8FA&age=15&sex=%E7%94%B75.get示例代码com/s?'#写成https,你是看不到的。我不知道为什么data={'ie':'utf-8','wd':word}query_string=urllib.parse.urlencode(data)url+=query_stringresponse=urllib.request.urlopen(url)filename=word+'.html'withopen(filename,'wb')asfp:fp.write(response.read())爬取的结果是一个html文件。请输入您要进入的内容:中国6.伪装UA如果不伪装爬虫,可能会被网站反爬。比如下面这段代码并没有伪装成自己,可以很明显的看出这个请求是爬虫发出的。示例代码importurllib.requestimporturllib.parseurl='http://www.baidu.com/'#最后的/不能省略,否则不是完整的url。可能会出现HTTPError400:BadRequestresponse=urllib.request.urlopen(url)print(response.read().decode())运行程序前打开Fiddler捕获这个请求。从抓包结果可以知道,请求头中的UA(User-Agent)为:Python-urllib/3.6。这样很容易被对方察觉,反爬。UA可以很容易的从Fiddler抓包中获取到,所以可以用正常请求的UA代替爬虫的UA来伪装。伪装爬虫示例代码importurllib.requestimporturllib.parseheaders={'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64)''AppleWebKit/537.36(KHTML,likeGecko)''Chrome/76.0.3809.132Safari/537.36'}url='http://www.baidu.com/'#最后的/不能省略,否则不是完整的url。HTTP错误400:可能会出现BadRequest。request=urllib.request.Request(url,headers=headers)response=urllib.request.urlopen(request)print(response.read().decode())从Fiddler可以看到此时请求头信息已经伪装成普通浏览器。----今天结束2019.11.14.17----
