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]