pythonrequest库及实例爬⾍
requests库的get()⽅法
以百度为例
import requests
axial#r为从⽹页上获得的内容(源代码,状态码,⽂本信息,编码⽅式等)
r = ("www.baidu")
python请求并解析json数据#状态码,只有200是正常的
r.status_code
#⽂本信息
<
#从HTTP header中猜测的响应内容编码⽅式
#从内容中分析出的响应内容编码⽅式
r.apparent_encoding
#将分析出的响应内容编码⽅式赋给从HTTP header中猜测的响应内容编码⽅式
#utf-8主要⽤来解析⽂字,当r.encoding不能解析时,使⽤r.apparent_encoding解析
爬取⽹页的通⽤代码框架
常见错误
requests.ConnectionError ⽹络连接异常
requests.HTTPError HTTP错误异常
requests.URLRequired URL缺失异常
requests.TooManyRedirects 超过最⼤重定向次数,产⽣重定向异常web安全性测试
requests.ConnectTimeout 连接远程服务器超时异常
requests.Timeout 请求URL超时,产⽣超时异常
爬取⽹页的通⽤代码框架
#爬取⽹页的通⽤代码框架
def getHTMLText(url):
try:
r = (url,timeout=30)
r.raise_for_status()#如果状态不是200,引发HTTPError异常
except:
return"产⽣异常"
if __name__=="__main__":
url ="www.baidu"
print(getHTMLText(url))
#当.py⽂件被直接运⾏时,if __name__ == '__main__'之下的代码块将被运⾏;
#当.py⽂件以模块形式被导⼊时,if __name__ == '__main__'之下的代码块不被运⾏。
HTTP协议及Requests库的主要⽅法
Requests库的主要⽅法
HTTP协议
HTTP,Hypertext Transfer Protocol,超⽂本传输协议
HTTP是⼀个基于“请求与响应”模式的、⽆状态的应⽤层协议HTTP协议采⽤URL作为定位⽹络资源的标识
URL格式 host[:port][path]
host:合法的Internet主机域名或IP地址
port:端⼝号,缺省端⼝为80
path:请求资源的路径
例⼦:www.bit.edu
#head⽅法,只获取头部信息
r = requests.head('/get')
r.headers
#post⽅法
payload ={'key1':'value1','key2':'value2'}
r = requests.post('/post',data = payload)
)
form即为所加内容
Requests库的主要⽅法解析
method:请求⽅式,对应get/put/post等7种
url:获取页⾯的url链接
**kwargs:控制访问的参数,共13个
如:params:字典或字节序列,作为参数增加到url中
kv ={'key1':'value1','key2':'value2'}
r = quest('GET','python123.io/ws',params=kv)
print(r.url)
结果:
data:字典、字节序列或⽂件对象,作为Request的内容
r = quest('POST','python123.io/ws',data=kv)
json:json格式的数据,作为Request的内容
headers:字典,HTTP定制头
cookies:字典或cookiejar,Request中的cookie
auth:元组,⽀持HTTP认证功能
timeout
proxies
爬取京东商品
url ='item.jd/100006976889.html'
android 直播sdktry:
r = (url,timeout=30)
r.raise_for_status()
[:1000])
except:
print("产⽣异常")
结果:
爬取亚马逊商品
import requests
结果
其中
‘User-Agent’: ‘python-requests/2.19.1’
表明这是python进⾏访问,容易被拒绝
对其进⾏修改,其通⽤代码框架为
url ='www.amazon/dp/B07PN2Z4VM/ref=sr_1_1?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&crid=1GG OOXJ899MP0&keywords=%E5%B9%B3%E5%87%A1%E7%9A%84%E4%B8%96%E7%95%8C&qid=1590886833&s=books&sprefix=PING%2Cdigital-text% 2C215&sr=1-1'
try:mysql升序排列
kv ={'user-agent':'Mozilla/5.0'}
#'Mozilla/5.0'是标准的浏览器标识
r = (url,headers = kv)
r.raise_for_status()
[1000:2000])
except:
print('爬取失败')
百度360搜索关键词提交
百度关键词接⼝:
www.baidu/s?wd=keyword
360的关键词接⼝:
www.so/s?q=keyword
import requests
keyword ='python'
try:
kv ={'wd':keyword}
#params这⼀参数可加⼊到url中,并⾃动加?
r = ('www.baidu/s',params = kv)
quest.url)
r.raise_for_status()
print())
except:ddd
print('爬取失败')
import requests
keyword ='python'
try:
kv ={'q':keyword}
r = ('www.so/s',params = kv)
quest.url)
r.raise_for_status()
print())
)
except:
print('爬取失败')
⽹络图⽚的爬取与存储
⽹络图⽚链接的格式
ample/picture.jpg
import requests
import os
url ='p0.ssl.qhimgs4/t018c2b5448092d9d33.webp'
root ='C://Users//胡银洪//Desktop//picture//'
path = root + url.split('/')[-1]+'.jpg'#需要在后加上'.jpg',作为其保存类型
shell衣服面料try:
if not ists(root):#根⽬录是否存在,如果不存在,则建⽴根⽬录
os.mkdir(root)
if not ists(path):#是否存在该⽂件,若⽆则爬取,若有,则显⽰‘⽂件已存在’ r = (url)
with open(path,'wb')as f:#以⼆进制形式打开该路径,并设置为f
f.t)#r.content为返回对象中的⼆进制信息,将r.content写⼊⽂件中 f.close()
print('⽂件保存成功')
else:
print('⽂件已存在')
except:
print('爬取失败')
IP地址归属地的⾃动查询
import requests
url ='m.ip138/ip.asp?ip='
kv ={'user-agent':'Mozilla/5.0'}
try:
r = (url+'202.204.80.112',headers = kv) r.raise_for_status()
[-500:])#最后500个字符
except:
print('爬取失败')
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论