requests.request(method,url,**kwargs)
**kwargs:控制访问的参数,均为可选项? ?params? ?data? ? headers? ? json? cookies? ? file? ? auth? ? timeout? ?proxies
?allow_redirects? :? True/False? 默认为True,重定向开关
stream? :?True/False? 默认为True,获取内容立即下载开关
verify? :??True/False? 默认为True,认证SSL证书开关
cert : 本地SSL证书路径
requests.get(url,params = None,**kwargs)
url? ? ?:? ? ? 获取页面的url链接
params? ? ?:? ? ? url中的额外参数,字典或者字节流格式,可选
**kwargs? ? :? ? ? 12个控制访问参数
requests.post(url,data= None,json=None,**kwargs)
url? ? ?:? ? ? 获取页面的url链接
data:? ? ? 字典、字节序列或者文件,Request的内容
json? ? :? JSON格式的数据,Request的内容
**kwargs? ? :? ? ? 11个控制访问参数
异常:
flag= False
while not flag:
? ? ? try:
? ? ? ? ? ?requests.adapters.DEFAULT_RETRIES= 15? #增加重试连接次数
? ? ? ? ? ?s= requests.session()#关闭多余的连接
? ? ? ? ? ? s.keep_alive= False? ? ? ? ? ? ? ? ? ? #requests 设置False关闭
? ? ? ? ? ? import urllib3.contrib.pyopenssl
? ? ? ? ? ? urllib3.contrib.pyopenssl.inject_into_urllib3()
? ? ? ? ? ??r= requests.get(url=url,headers=headers,verify=False,stream=False,timeout=30)? ? #证书验证设FALSE,timeout为30
? ? ? ? ? ? r.raise_for_status()?? ? ? ? ? ? ?#不是200,抛出异常requests.HTTPError
? ? ? ? ? ? r.encoding= r.apparent_encoding
? ? ? ? ? ? ?print("采集网页的状态码:%s" % r.status_code)
? ? ? ? ? ? ? print("采集网页的URL:%s" % r.url)
except:
? ? ? ? ? ? print('[ %s ] HTTP请求失败?。?!正在准备重发。。。' %url)
? ? ? ? ? sleep(3)
? ? ? ?continue
? ? ? ?flag= True
r.close()
html_title= "".join(etree.HTML(r.text).xpath('//title/text()'))
print("采集网页的标题:%s" %html_title)
title_path= './Domain_Title.txt'
savefile(title_path, html_title)
print("爬取完成:对%s目标地址采集完成" % url)
#sleep(0.3)
print("*"*70)
反爬虫:? 1? ?User-Agent? ? 2? ?Robots.txt协议? ?自动或者人工识别,再进行内容爬取。
robots.txt协议的查找? ? ? ? ? ? ? ? ? ? ? ?https://www.baidu.com/robots.txt
Robots.txt协议 是建议但非约束性,网络爬虫可以不遵守,可能存在法律风险。
类人行为可以不遵守,爬取量很小或者爬取时间很短或者爬取次数很少。但是获取的资源不能进行商业用途。
os.path.exist()? ? ? ?os.path.isfile()
pip? ?install? ?beautifulsoup4? ? ? #bs4库将任何读入的html文件或字符串都转换成了utf-8格式? 使用python3更合适
from? ?bs4? ?import? ?BeautifulSoup? ? #是解析html或者xml文档的库? ,BS4库的标签树的遍历
优点:? 信息解析准确。
缺点: 提取过程繁琐,速度慢!
soup = BeautifulSoup("<p>中文</p>","html.parsel")
soup.prettify()? ? ? #这个方法能为文本以及html的标签增加换行符、补全标签
print(soup.p.string)
print(soup.p.prettify())
soup = BeautifulSoup(demo,"html.parsel")
soup.head
soup.head.contents
soup.body.contents
soup.body.contents[1]