实战三—向搜索引擎提交搜索请求
- 关键点:利用搜索引擎提供的接口
- 百度的接口:
wd=“要搜索的内容”
- 360的接口:
q=“要搜索的内容”
- 所以我们只要把我们提交给服务器的url修改成对应的格式,就可以向搜索引擎提交关键字。
- 修改url,第一个想到的就是
params
参数。只须构造键值对,提交给params
即可。 - 键值对前面的代表搜索引擎前面的接口标识,键值对后面的代表我们要搜索的内容。
>>> import requests>>> kv = {'wd':'python'}>>> r = requests.get("http://www.baidu.com/s",params=kv)>>> r.status_code200
- 用
response
对象中的request
对象来查看我们提交给服务器的URL链接。
>>> r.request.url'http://www.baidu.com/s?wd=python'
- 给出完整代码:
import requestskv = {'wd':'python'}url = "http://www.baidu.com/s"try: r = requests.get(url,params = kv) print(r.request.url) r.raise_for_status() print(r.text[:2000])except: print("爬取失败")
实战四—图片的爬取和存储
- 图片链接的格式,
url+xxxx.jpg
- 给出图片的地址,爬取下来后存放到本机的某一个位置。
>>> import requests>>> path = "/Users/hyliu/Desktop/picture.jpg">>> url = "https://gss3.bdstatic.com/-Po3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike80%2C5%2C5%2C80%2C26/sign=3acf58502f7f9e2f6438155a7e598241/7aec54e736d12f2e227c44d647c2d5628535680f.jpg">>> r = requests.get(url)>>> r.status_code200
- 现在
r
中已经包含了我们想要的图片,接下来要做的事情就是把图片变成文件存放到本机。 - 我们知道图片是一个二进制格式,用如下代码来实现:
>>> path = "/Users/hyliu/Desktop/picture.jpg">>> with open(path,'wb') as f: f.write(r.content)53658>>>
- 这段代码的含义就是,我们先打开一个文件
picture.jpg
,并定义为一个文件标识符f
。然后我们将返回的内容写入到这个文件中。 r.content
表示返回内容的二进制格式,所以我们将r.content
写入到图片文件中。- 最后我们将文件关闭。
>>> f.close()>>>
- 现在我们去查看我们爬取的结果(是不是很帅!)
- 给出完成代码(用图片原本的名称来命名):
import requestsimport osurl = "https://gss3.bdstatic.com/-Po3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike80%2C5%2C5%2C80%2C26/sign=3acf58502f7f9e2f6438155a7e598241/7aec54e736d12f2e227c44d647c2d5628535680f.jpg"root = "/Users/hyliu/Desktop/"path = root + url.split('/')[-1] #获取URL最后一个“/”后的内容,实际上就是获取图片原本的名字try: if not os.path.exists(root): #目录不存在则创建 os.mkdir(root) if not os.path.exists(path): #判断是否存在重名文件 r = requests.get(url) #print(r.status_code) r.raise_for_status() with open (path,'wb') as f: f.write(r.content) f.close() print("文件保存成功!") else: print("文件已存在")except: print("爬取失败")
实战五—查询IP地址的归属地
- 借助IP138网站查询:
- 思路就是像百度和360那样,找到IP138网站的接口信息。
>>> import requests>>> url = "http://m.ip138.com/ip.asp">>> kv = {'ip':'218.106.145.15'}>>> r = requests.get(url,params = kv)>>> r.status_code200>>> r.text[-500:]'submit" value="查询" class="form-btn" />\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tip138.com IP查询(搜索IP地址的地理位置)\r\n\t\t\t\t您查询的IP:218.106.145.15
本站主数据:福建省福州市 联通
参考数据一:福建省福州市 联通
\r\n\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t \r\n\t\r\n\r\n\t\r\n\r\n'>>>
- 给出完整代码:
import requestskv = {'ip':'218.106.145.15'}url = "http://m.ip138.com/ip.asp"try: r = requests.get(url,params = kv) r.raise_for_status() print(r.text[-500:])except: print("爬取失败")
URL is API