Python网络爬虫与信息提取
一. Requests库入门
Requests库的安装:
以管理员身份运行cmd,并执行以下语句:
pip install requests
测试是否安装成功:
import requests
r = requests.get("http://www.baidu.com")
print(r.status_code)
r.text
Requests库的7个主要方法:
方法 | 说明 |
---|---|
requests.request() | 构造一个请求,支撑以下各方法的基础方法 |
requests.get() | 获取HTML网页的主要方法,对应于HTTP的GET |
requests.head() | 获取HTML网页头信息的方法,对应于HTTP的HEAD |
requests.post() | 向HTML网页提交POST请求的方法,对应于HTTP的POST |
requests.put() | 向HTML网页提交PUT请求的方法,对应于HTTP的PUT |
requests.patch() | 向HTML网页提交局部修改请求,对应于HTTP的PATCH |
requests.delete | 向HTML页面提交删除请求,对应于HTTP的DELETE |
Requests库的get()方法:
r = requests.get(url)
1)r:返回一个包含服务器资源的Response对象
2)requests.get(url):构造一个向服务器请求资源的Request对象
requests.get(url, params=None, **kwargs)
1)url :拟获取页面的url链接
2)params :url中的额外参数,字典或字节流格式,可选
3) **kwargs: 12个控制访问的参数
二. 网络爬虫Robots协议
网络爬虫的尺寸:
小规模,数据量小 | 中规模,数据规模较大 | 大规模,搜索引擎 |
---|---|---|
爬取速度不敏感 | 爬取速度敏感 | 爬取速度关键 |
Requests库 >90% | Scrapy库 | 定制开发 |
爬取网页 玩转网页 | 爬取网站 爬取系列网站 | 爬取全网 |
网络爬虫的限制
- 来源审查:判断User-Agent进行限制
检查来访HTTP协议头的User-Agent域,只响应浏览器或友好爬虫的访问 - 发布公告:Robots协议
告知所有爬虫网站的爬取策略,要求爬虫遵守
Robots协议:
Robots Exclusion Standard,网络爬虫排除标准
- 作用:
网站告知网络爬虫哪些页面可以抓取,哪些不行 - 形式:
在网站根目录下的robots.txt文件
三. Requests库网络爬虫实例
3.1 XX商品页面的爬取
全代码:
import requests
url = "https://item.jd.com/2967929.html"
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[:1000])
except:
print("爬取失败")
3.2 XXX商品页面的爬取
全代码:
import requests
url ="https://www.amazon.cn/gp/product/B01M8L5Z3Y"
try :
kv = {'user-agent':'Mozilla/5.0'}
r = requests.get(url,headers=kv)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[1000:2000])
except:
print("爬取失败")
3.3 XXXXX搜索关键词提交
搜索引擎关键词提交接口:
- 网站的关键词接口:
http://www.baidu.com/s?wd=keyword - 网站的关键词接口:
http://www.so.com/s?q=keyword
XX搜索全代码:
import requests
keyword = "Python"
try:
kv={'wd':keyword}
r = requests.get("http://www.baidu.com/s",params=kv)
print(r.request.url)
r.raise_for_status()
print(len(r.text))
except:
print("爬取失败")
XX搜索全代码:
import requests
keyword = "Python"
try:
kv = {'q':keyword}
r = requests.get("http://www.so.com/s",params=kv)
print(r.request.url)
r.raise_for_status()
print(len(r.text))
except:
print("爬取失败")
3.4 网络图片的爬取和储存
网络图片的爬取
- 网络图片链接的格式:
http://www.example.com/picture.jpg
国家地理: http://www.nationalgeographic.com.cn/ - 选择一个图片Web页面:
http://www.nationalgeographic.com.cn/photography/photo_of_the_
day/3921.html - 图片地址: http://image.nationalgeographic.com.cn/2017/
0211/20170211061910157.jpg
图片爬取全代码
import requests
import os
url = "http://image.nationalgeographic.com.cn/2017/0211/20170211061910157.jpg"
root = "D://pics//"
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)
f.close()
print("文件保存成功")
else:
print("文件已存在")
except:
print("爬取失败")
3.5 IP地址归属地的自动查询
http://m.ip138.com/ip.asp?ip=ipaddress
IP地址查询全代码:
import requests
url = "http://m.ip138.com/ip.asp?ip="
try:
r= requests.get(url+'202.204.80.112')
r.raise_for_status()
r.encoding = r.apparent encoding
print(r.text[-500:])
except:
print("爬取失败")