前面学习了requests库,现在来尝试爬取几个网页吧。
一、爬取亚马逊图书信息
step1: 初步尝试:首先使用requests库的get函数获取response对象:
import requests
url = "https://www.amazon.cn/dp/B01JRE0HIY/ref=lp_116170071_1_1?s=digital-text&ie=UTF8&qid=1565856273&sr=1-1"
r = requests.get(url)
print(r.status_code)
此时输出的 status_code
为503,即获取响应失败
step2: 查看 user-agent:使用 r.request.headers
查看我们发送的请求头部信息
import requests
url = "https://www.amazon.cn/dp/B01JRE0HIY/ref=lp_116170071_1_1?s=digital-text&ie=UTF8&qid=1565856273&sr=1-1"
r = requests.get(url)
print(r.request.headers)
此时查看输出信息可以发现,我们的爬虫忠实地告诉了浏览器自己是爬虫?,而该网页使用了反爬机制,拒绝响应:
{'User-Agent': 'python-requests/2.22.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
***Repl Closed***
step3: 伪装成为浏览器:我们可以修改headers信息,伪装成为浏览器,从而获取服务器响应
import requests
url = "https://www.amazon.cn/dp/B01JRE0HIY/ref=lp_116170071_1_1?s=digital-text&ie=UTF8&qid=1565856273&sr=1-1"
hd = {"user-agent": "Mozilla/5.0"}
r = requests.get(url, headers = hd)
print(r.status_code)
此时,我们通过修改user-agent将自己伪装成为浏览器,得到了正确的状态码,查看user-agent的方法可以检查网页,如图:
step4: 抓取信息:我们而可以使用异常处理机制来爬取信息:
import requests
url = "https://www.amazon.cn/dp/B01JRE0HIY/ref=lp_116170071_1_1?s=digital-text&ie=UTF8&qid=1565856273&sr=1-1"
try:
hd = {"user-agent": "Mozilla/5.0"}
r = requests.get(url, headers = hd)
print(r.status_code)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[0:1000])
except:
print("Error")
此时,就可以抓取到我们需要的HTML代码啦。
二、百度/360搜索关键词提交
搜索引擎冠军按此提交接口
百度:http://www.baidu.com/s?wd=keyword
360:http://www.so.com/s?q=keyword
百度关键词提交:输出提交后的url和搜索结果长度
import requests
keyword = "Python"
try:
kv = {"wd": keyword}
r = requests.get("http://www.baidu.com/s", params = kv)
print("url: ", r.request.url)
r.raise_for_status()
print(len(r.text))
except:
print("Error")
输出结果:
360关键词提交:输出提交后的url和搜索结果长度
import requests
keyword = "Python"
try:
kv = {"q": keyword}
r = requests.get("http://www.so.com/s", params = kv)
print("url: ", r.request.url)
r.raise_for_status()
print(len(r.text))
except:
print("Error")
输出结果:
三、图片的爬取和存储
我们知道,图片是用二进制 wb
存储的,我们可以把content内容保存为对应的格式来存储图片:
import requests, os
url = "https://i2.hdslb.com/bfs/face/a5baab6c5f47a68fe9397fe6f37e79a7f3629a06.gif"
root = "D://picts//"
path = root + url.split('/')[-1]
try:
if not os.path.exists(root):
os.mkdir(root)
if not os.path.exists(path):
r = requests.get(url)
with open(path, 'wb') as f:
f.write(r.content)
print("Successfully")
else:
print("File exits already!")
except:
print("Error")
我们使用os.path.exits()函数来判断目录文件夹和目标文件是否存在,使用open(path, wb’)来将r.content写入文件:
四、IP地址归属地的自动查询
这是一个可以查询IP归属地的网址2 ? http://m.ip138.com/ip.asp 我们可以利用python将参数提交到提交框中,并将返回的内容打印出来:
import requests
ip = "55.55.55.55"
url = "http://m.ip138.com/ip.asp"
try:
kv = {"ip": ip}
r = requests.get(url, params = kv)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[-400:-250])
except:
print("Error")
代码类似百度提交关键字,我们构造了一个字典,传入 params
参数,输出如下:
查询(搜索IP地址的地理位置)</div>
<h1 class="query">您查询的IP:55.55.55.55</h1>
<p class="result">本站主数据:美国 弗吉尼亚美国陆军部队</p>
<p class="result">参考数据一:美国 弗吉尼亚美国陆军部队</p>
***Repl Closed***
第三篇python爬虫学习笔记完结啦 cheers ??
参考内容:【Python网络爬虫与信息提取】.MOOC. 北京理工大学