北京理工大学MOOC爬虫笔记一(第0+1周)
一共四周
一、开发工具及特点
二、requests库
demo1:
import requests r=requests.get('http://www.baidu.com') print(r.status_code) print(r.text) print(r.encoding) print("r.apparent_encoding:{}".format(r.apparent_encoding)) r.encoding='utf-8' #不会出现乱码 print(r.text)
demo2:爬虫的通用代码框架(捕获异常)
import requests def getHTMLText(url): try: r = requests.get(url,timeout=30) r.raise_for_status()#如果状态不是200,引发HTTPError异常 r.encoding = r.apparent_encoding return r.text except: return"产生异常" if __name__=="__main__": url="http://www.baidu.com" print(getHTMLText(url))
demo3:
payload={"key1":"value1","key2":"value2"} r=requests.request('GET',"http://httpbin.org/post",params=payload) print(r.url) #http://httpbin.org/post?key1=value1&key2=value2
(1)requests.request(method,url,**kwargs)
method:请求方式7种post/get/put等
url:拟获取页面的URL链接
**kwags:13个控制访问的参数
(2)requests.get(url,params-None,**kwargs)
url:拟获取页面的URL链接
params:URL中的额外参数,字典或字节流格式,可选
**kwags:12个控制访问的参数
(3)requests.head(url,**kwags)
url:拟获取页面的URL链接
**kwags:13个控制访问的参数
(4)requests.post(url,data=None,json=None,**kwags)
url:拟更新页面的URL链接
data:字典、字节序列或文件,Request的内容
json:JSON格式的数据,作为Request的内容
**kwags:11个控制访问的参数
(5)requests.put(url,data=None,**kwags)
url:拟更新页面的URL链接
data:字典、字节序列或文件,Request的内容
**kwags:12个控制访问的参数
(6)requests.patch(url,data=None,**kwags)
url:拟更新页面的URL链接
data:字典、字节序列或文件,Request的内容
**kwags:12个控制访问的参数
(7)requests.delete(url,**kwags)
URL:拟删除页面的URL链接
**kwags:12个控制访问的参数
三、网络爬虫的“盗亦有道
四、实例
demo1:
import requests url = "https://www.amazon.cn/gp/product/B01M8L5Z3Y" try: # 重新定义 user-agent 内容,模拟浏览器 kv = {'user-agent': 'Mozilla/5.0'} r = requests.get(url, headers = kv) r.raise_for_status() # 如果失败则返回错误,直接跳到 except # 亚马逊这里是错误 503 r.encoding = r.apparent_encoding # 编码方式为自动选择为apparent_encoding # r.encoding = '...' # 这个网页编码是... print(r.text[:1000]) # 前1000个字符 except: print("爬取失败")
demo2:
import requests keyword = 'Python' # 关键词 Python kv = {'q':keyword} try: r = requests.get("http://www.so.com/s",params = kv) # 如果失败则返回错误,直接跳到 except r.raise_for_status() print(r.request.url) print(len(r.text)) except: print("error")
demo3:
import requests url = 'https://user.ip138.com/login?refer=' try: r = requests.get(url + 'https://user.ip138.com/ip/') r.raise_for_status() r.encoding = r.apparent_encoding print(r.text[-500:]) # 倒数500字节 except: print("Fail")