爬虫库知识总结
注意事项:
1 对于爬虫的每一步都要考虑到可能出现的错误,增加代码的可靠性
2 爬虫需要分析后再写代码,保证网页在有一定的修改后依然能正确的运行
3 要增加代理保证爬虫不被限制
4 在有移动端的情况下,最好去模拟手机去爬取移动端
爬取步骤
1 获取网页内容:getHTMLText()
2 提取信息到合适的数据结构:fillUnivList()
3 利用数据结构展示内容:printUnivList()
爬虫模版
import requests
keyword="python"
headers = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36",
}
try:
kv = {'wd': keyword}
r=requests.get('https://www.baidu.com/s',params=kv,headers=headers)
r.raise_for_status()
print(r.text)
except:
print("爬取失败")
Requests
构造一个请求
request(method,url,kwargs)
用get方法去请求
get(url,params,kwargs):
常用的参数与函数
params
:url中额外的参数
kwargs
:控制访问参数
headers
:字典,http头信息
cookies
:字典
auth
:元组 http认证功能
timeout
:单位秒
proxies
:字典 设置代理,可增登录认证
pxs={'http':'[http://10.10.10.1:3214]'}
post()
:用post方法去请求
head()
:获取网页头信息
put()
:写数据
patch()
:局部修改
delete()
:删除
requests
异常
ConnectionError
:DSN查询失败,拒绝连接等
HTTPError
:HTTP错误异常
URLRequired
:url缺失
Timeout
:请求超时
response
属性
r.status_code
:200成功 404(页面不存在) 500(服务器不存在)
r.text
:相应的内容
r.encoding
:从header中猜测的编码方式
r.apparent_encoding
:从内容中分析出编码(已知要爬去的网页的编码格式,可不调用这个函数以此优化)
r.raise_for_status()
:如果不是200产生HTTPError错误
BeautifulSoup
-
soup.b
获取子节点下第一个b标签 -
tag
对象tag['class']
获取标签的class
属性值tag.attrs
全部属性 -
NavigableString
tag.string
如果tag
里面只有内容没有其他子标签,可以这样获得内容 -
find_all( name , attrs , recursive , text , **kwargs )
name
标签名字attrs
属性名字limit=3
限制搜索的个数recursive
如果只想搜索tag的直接子节点,可以使用参数recursive=False
-
from bs4 import BeautifulSoup
soup=BeautifulSoup(open(index.html)
-
demo=soup.text
#获取节点内全部文本内容 -
[soup.b.parent.parent.name]
#查看祖父节点名字 -
没有返回说明是空信息
-
soup.b.contents
#查看这个节点的内容 返回列表类型 转义字符等也算节点内容len(soup.b.contents)
#查看子节点的个数soup.b.contents[0]
#看第一个子节点 -
soup.p.next_sibling
#下一个平行标签soup.previous_next_sibling
#上一个平行标签 -
soup.p.prettify()
#给每一个标签加一个‘\n’
tag = soup.b #获取标签
tag['class'] #查看标签类名
tag.attrs #查看标签属性
tag['class'] = 'verybold'
tag['id'] = 1 #如果属性不存在。将创建一个属性
del tag['class']
del tag['id']
css_soup = BeautifulSoup('<p class="body strikeout"></p>')
css_soup.p['class']
for child in soup.body.children: #遍历子节点
print(child)
for child in soup.body.descendants: #遍历子孙节点
print(child)
for parent in soup.p.parents: #遍历p的全部上级标签
if parent is None:
print(prrent) #父标签不存在就不能打印了
else:
print([prrent.name])
for sibling in soup.p.next_siblings: #遍历p的全部前面标签
print(sibling)
for sibling in soup.p.previous_next_siblings: #遍历p的全部后面标签
print(sibling)
for link in soup.find_all('a'): #返回列表类型
print(link.get('href'))
soup.find_all() #查找a和b标签
soup.find_all(['a','b'],'course','asdasd') #查找a标签属性为course的标签
soup.find_all(id='box') #查找id=box的标签
divs=soup.findAll('div',{'class':'gl-i-wrap'})
divs=soup.findAll('div',class_='gl-i-wrap')
原文地址:https://www.cnblogs.com/tzfs/p/14828919.html
- 设计一个界面,很简单!
- 配置Quartz.net Cluster以及远程管理
- [原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
- Flash/Flex学习笔记(49):3D基础
- Flash/Flex学习笔记(51):3维旋转与透视变换(PerspectiveProjection)
- Linux系统批量化安装部署之Cobbler
- 解决JQuery中的ready函数冲突
- 关于监视容器我们了解的5件事
- C#检测SqlServer中某张表是否存在
- Cobbler自动化批量安装linux服务器的操作记录
- Twemproxy——针对MemCached与Redis的代理
- 谁适合学Python?学了Python可以做什么工作?
- webservice今日遇到的二个问题:DataTable + Namespace
- php安全配置记录和常见错误梳理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python实例化对象的具体方法
- PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
- YII框架关联查询操作示例
- Keras之fit_generator与train_on_batch用法
- django美化后台django-suit的安装配置操作
- python读取excel进行遍历/xlrd模块操作
- 浅谈Keras的Sequential与PyTorch的Sequential的区别
- python 制作python包,封装成可用模块教程
- 使用python脚本自动生成K8S-YAML的方法示例
- Python虚拟环境库virtualenvwrapper安装及使用
- tp5框架内使用tp3.2分页的方法分析
- YII框架常用技巧总结
- PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
- PHP切割汉字的常用方法实例总结
- Laravel Validator 实现两个或多个字段联合索引唯一