在爬虫中,需要用到的一个包就是urllib
下面写一个最简单的爬虫代码
import urllib.request
#在python3中导入的就是urllib.request,在python2中则不需要.request,直接导入urllib
response = urllib.request.urlopen('http://www.baidu.com/')
#运用 urllib.request的urlopen方法就可以访问一个URL地址,返回的是一个类文件对象
即可以像文件一样操作,读写等。
html = response.read()
html = html.decode('utf-8')
print(html)
#将 response读出之后将其转为utf-8格式即可打印出来,是html页面代码
当然直接用urlopen不支持构造HTTP请求,即无法添加header,即无法模拟浏览器请求
会直接被识破为爬虫。
我们打开百度首页,检查在network中就可以找到Request Headers即请求头,浏览器发送请求会连带着Request Headers一起发送,服务器就依靠Request Headers识别浏览器,而其中必要的就是User-Agent属性。
Request Headers
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
Cookie: BAIDUID=F2FAFC90F5DAA64E705APSTM=1535338557; BD_UPN=12314353; BDUSS=FQ4bk9SaUNuRm95eUp5S1dVm95M2hzZExjeFl2aDYXN5YTJSb1JIa1JjQVFBQUFBJCQAAAAAAAAAAAEAAAAwdWx9sNm~~M~IyfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRCVFR[84MTKKs3M0n]m; PSINO=7; BDSVRTM=0
Host: www.baidu.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
因此我们在发送请求时,必须要有的就是User-Agent,当然其他的视情况而定,写完整是最保险的。
import urllib.request
ua_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}
#所以可以用urllib.request的Request方法重构请求
#Request参数很多常用的3个:URL(请求地址),data(请求方式,有数据表示是post请求,无表示get), headers(报头属性)
request1 = urllib.request.Request('http://www.baidu.com/',headers=ua_headers)
response = urllib.request.urlopen(request1)
html = response.read()
html = html.decode('utf-8')
print(html)