首页 > 编程知识 正文

爬虫国内外研究现状分析,八种最好的记笔记方法

时间:2023-05-04 05:43:45 阅读:140134 作者:4382

'''中国最高大学排行榜' ' ' ' importrequestsfrombs4importbeautifulsoupdefget _ html _ text (URL ) : try 3360 HD={ ' auth-agege r.encoding=r.apparent_encoding; return r.text except: print (连接错误) ) return ) ' deffill_univ_list ) r ) :soup=beautifulsoup(r, ' html.Paaage ls=[]forIinrange(10 ) :ls_TD.append ) ls_tr[I].find_all ) TD ' ) foriteminls _ TD 33330 defprint_univ_list(ls ) :tplt='{0:^10}(t ) 1:{3}^10} ) t ) 2:^10 ); print(tplt.format )、“排名”、“学校名称”、“分数”、chr(12288 ) ) forIinrange ) 10 ) : ) tplt.format ) [ ls [ I print_univ_list(ls; URL=' http://www.zuihaodaxue.com/zuihaodaxuepaiming 2016.html ' main (URL )定向网数据的爬网与网分析

Requests库:自动访问HTML页面并自动提交web请求

robots.txt :互联网爬虫排除标准

beautiful soup :解析html接口

Re库:正则表达式库,提取页面的重要信息

Scrapy* :网络爬虫原理介绍,专业爬虫框架介绍

使用Requests库

requests.request(# )创建一个请求,以支持以下各种方法的基本方法

requests.get(#html获取页面的主要方法对应于HTTP的get

requests.head (获取# html页面的头部信息的方法与HTTP的头部对应

requests.post(# )将post请求发送到与http post相对应的HTML页面

requests.put(#将put请求提交到与http put相对应的HTML页面

requests.patch(# )向HTML页面提交与HTTP路径相对应的本地修改请求

requests.delete(# )将与HTTP删除对应的删除请求提交到HTML页面

requests.request(method,url,**kwargs ) )。

method :请求方式GET、HEAD、POST、PUT、PATCH、delete、OPTIONS

**kwargs :控制访问的参数作为参数追加到url

params :作为词典或字节列、参数添加到url

importrequestskv={ ' key1' : ' value1',' key2' : ' value2' } r=requests.request (' get ',' http://python118

importrequestskv={ ' key1' : ' value1',' key2' : ' value2' } r=requests.request (' post ',' http://python

标题:词典,http自定义标题#可以模拟任何浏览器

importrequestshd={ ' user-agent ' : ' chrome/10 ' } r=requests.request (' post ',' http://python123.io/ws )

auth :元组类型,支持HTTP认证功能

files :词典类型、传输文件

importrequestsfs={ ' file ' : open ' data.xls ',' Rb'}r=requests.request ',' http://python123.iithon

r=requests.request('GET','http://python123.io/ws',timeout=30)

proxies:字典类型,设定访问代理服务器,可以增加登录认证

import requestspxs={'http':'http://user:pass@10.10.10.1:1234', 'https':'http://10.10.10.1:4321'}r=requests.request('GET','http://www.baidu.com',proxies=pxs)

allow_redirects:True/False,默认是True,重定向开关
stream:True/False,默认是True,获取内容立即下载开关
verify: True/False,默认是True,认证SSL证书开关
cert:本地SSL证书路径

r=requests.get(url)#构造一个向服务器请求资源的request对象,返回一个包含服务器资源的response对象,最重要的。返回爬虫需要的内容
requests.get(url,params,**kwargs)#url:拟获取页面的链接;params:url的额外参数,字典或字节流样式,可选;**kwargs:12个控制访问参数
import requests
r=requests.get(“http://www.baidu.com”)
print(r.status_code)#返回状态码,如果是200,成功,如果不是200,失败
r.header #返回get请求界面的头部信息,字典类型
Response对象的属性:
r.status_code #HTTP请求的返回状态,200表示连接成功,404表示失败
r.text #http相应内容字符串的信息,即,url对应的页面内容
r.encoding #从http headers中猜测的响应内容的编码方式
r.apparent_encoding #从内容中分析出的响应内容编码方式(备选编码方式)
r.content #http响应内容的二进制形式
Requests的异常处理
requests.ConnectionError #网络连接错误异常,如DNS查询失败、拒绝连接等
requests.HTTPError #HTTP错误异常
requests.URLRequired #URL缺失异常
requests.TooManyRedirects #超过最大重定向次数,产生重定向异常
requests.ConnectionTimeout #连接远程服务超时异常
requests.Timeout #请求URL超时,产生超时异常
r.raise_for_status() #如果不是200,产生异常requests.HTTPErrorr

提交数据代码import requestspayload={'key1':'value1','key2':'value2'}r=requests.post('http://httpbin.org/post',data=payload)print(r.text)

HTTP协议:超文本传输协议,请求-响应,无状态
http://host[:port][path]
host:合法的Internet主机域名或者是IP地址
port:端口号,缺省端口号是80
path:请求资源的路径
方法:
GET:请求获取URL位置的资源
HEAD:请求获取URL位置资源的响应消息报告,即头部信息
POST:请求向URL位置的资源后附加新的数据
PUT:请求向URL位置存储一个资源,覆盖原URL位置的资源
PATCH:请求局部更新URL位置的资源,即改变该处资源的部分内容
DELETE:请求删除URL位置储存的资源

小规模、爬取网页用Requests库,对爬取速度不敏感
中规模、爬取系列网站使用Scrapy库,对爬取速度敏感
大规模、爬取全网、建立搜索引擎,定制开发,爬取全网
网络爬虫的限制:来源审查:判断User-Agent进行限制,发布公告

获取url内容

import requeststry: hd={'user-agent':'Chrome/10'} url="https://www.baidu.com" r=requests.get(url,headers=hd) r.raise_for_status() print(r.text[:1000])except: print("爬虫失败")

查询IP地址的归属

import requeststry: ip='112.38.203.59' hd={'user-agent':'Chrome/10'} url="https://www.ip138.com/iplookup.asp" kv={'ip':ip,'action':2} r=requests.get(url,headers=hd,params=kv) r.raise_for_status() r.encoding=r.apparent_encoding print(r.url+'n',r.text[:1000])except:print("爬虫失败")

解析网站信息

import requestsfrom bs4 import BeautifulSoupr=requests.get(url)demo=r.textsoup=BeautifulSoup(demo,’html.parse’)

BeautifulSoup库解析器
bs4的HTML解析器:BeautifulSoup(mk,’html.parse’),条件是安装bs4库
lxml的HTML解析器:BeautifulSoup(mk,’lxml’),条件是pip install lxml
lxml的XML解析器:BeautifulSoup(mk,’xml),条件是 pip install lxml
html5lib的解析器:BeautifulSoup(mk,’html5lib’),条件是pip install html5lib
BeautifulSoup的基本元素
Tag:标签<></>
Name:标签的名字

……

,p是标签的名字,.name
Attributes:标签的属性,字典形式组织,格式:.attrs
Navigablestring:标签内,非属性的字符串
Comment:标签内字符串的注释部分,一种特殊的Comment类型
soup.a后面可以点的东西:parent上一层标签,name名字,string里面的字符串,attrs属性
<!注释部分>
标签树的下行遍历
.contents子节点的列表,将所有的儿子存入列表
.children子节点的迭代类型,与.contents类似,用于循环遍历儿子节点
.descendants子孙节点的迭代类型,包含所有子孙节点,用于循环遍历
标签树的上行遍历
.parent节点的父亲标签
.parents节点先辈标签的迭代类型,用于循环遍历先辈节点
标签树的平行遍历
.next_sibling按照HTML文本顺序的下一个平行节点标签
.previous_sibling按照HTML文本顺序的上一个平行节点标签
.next_siblings迭代类型,返回按照HTML文本顺序的后续所有平行节点标签
. previous _siblings迭代类型,返回按照HTML文本顺序的前续所有平行节点标签
迭代类型智能在for in类型遍历
print(soup.prettify())在每个标签后加一个’n’,显得好看点,也可以对单个标签进行处理

信息的三种标识:XML,JSON,YAML
XML标识形式:,,
JSON标识形式:键值对,’key’:’value’,’key’:[‘value1’,’value2’],’key1’:{‘key2’:’value’}
YAML标识形式:
key:value
key :#Comment
-value1
-value2
key:
subkey:subvalue
XML:互联网上的信息交换和传递
JSON:移动应用云端和节点的信息通信,无注释
YAML:各类系统的配置文件,有注释易读

信息提取的一般方法
方法1:完整解析信息的标记形式,在提取关键信息
XML JSON YAML
需要标记解析器,比如果bs4的标签树遍历,信息解析准确,但是速度慢
方法2:无视标记形式,直接搜索关键信息
对信息的文本查找函数即可,提取速度快,但是准确性不好

soup的函数
soup.find_all(‘a’)#查找soup中所有的a标签
soup.find_all([‘a’,’b’])#查找soup中所有的a,b标签
soup.find_all(True)#返回soup中的所有标签
soup.find_all(re.compile(‘b’))#显示所有以b开头的标签,re是正则表达式库
soup.find_all(‘p’,’course’)#显示所有带有course的p标签
soup.find_all(id=’link1’)#返回属性中id=‘link1’的标签元素
soup.find_all(id=re.compile(‘link’))#返回id=以link开头的标签
soup.find_all(string=’basic python’)#查找basic python字符串
Ssoup.find_all(string=re.compile(basic python))#查找出现python的字符串
soup.a.get(‘href’)#返回标签a中的所有href内容
<>.find.all(name,attrs,recursive,string,**kwargs),<>表示一个节点
返回一个列表类型,储存查找的结果
name:对标签名称的检索字符串
attrs:对标签属性值的检索字符串,可标注属性检索
recursive:是否对子孙全部检索,默认为True
string:查找字符串
(…)等价于.find_all(…)
soup(…)等价于soup.find_all(…)
扩展方法
<>.find()#搜索且只返回一个结果,字符串类型,同find_all()参数
<>.findparents()#在先辈节点中搜索,返回列表
<>.findparent()#在父亲节点中返回一个结果,字符串类型
<>.find_nextsiblings()#在后续平行节点中搜索,返回列表
<>.find_nextsibling()#在后续节点中搜索,返回一个结果,字符串
<>.find_previous_siblings()#在前序平行节点中搜索,返回列表
<>.find_nextsibling()#在前序节点中搜索,返回一个结果,字符串

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。