爬虫库requests和BeautifulSoup的基本使用
Posted 晨峰说
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫库requests和BeautifulSoup的基本使用相关的知识,希望对你有一定的参考价值。
爬虫获取数据总体上可以分为两步:
- 获取网页
主要用到 requests
(发送网页请求) selenium
(使用浏览器访问网页)
- 解析网页
主要用到 BeautifulSoup
下面将简单介绍上面三个库的使用
requests 从URL中得到网页
使用 pip install requests
安装
使用 import requests
引用
快速使用
import requests
r = requests.get('http://zoollcar.top') # 发送请求到url
print(r.text) # 输出获取到的页面文本
requests 的7个主要方法
使用格式 requests.ge(url, params=None, **kwargs)
方法 | 功能 |
---|---|
requests.request() | 所有其他方法的基础方法 |
requests.get() | 获得URL的内容 |
requests.head() | 请求获取URL位置资源的响应消息报告,即获得该资源的头部信息 |
requests.post() | 请求向URL位置的资源后附加新的数据 |
requests.put() | 请求向URL位置存储一个资源,覆盖原URL位置的资源 |
requests.patch() | 请求局部更新URL位置的资源,即改变该处资源的部分内容 |
requests.delete() | 请求删除URL位置存储的资源 |
可选参数 **kwargs
参数 | 说明 |
---|---|
params | 字典或字节序列,作为参数增加到url中 |
data | 字典、字节序列或文件对象,作为Request的内容 |
json | JSON格式的数据,作为Request的内容 |
headers | 字典,HTTP定制头 |
cookies | 字典或CookieJar,Request中的cookie |
auth | 元组,支持HTTP认证功能 |
files | 字典类型,‘file’: open(‘data.xls’, ‘rb’) |
timeout | 设定超时时间,秒为单位 |
proxies | 字典类型,设定访问代理服务器,可以增加登录认证 |
allow_redirects | True/False,默认为True,重定向开关 |
stream True/False | 默认为True,获取内容立即下载开关 |
verify True/False | 默认为True,认证SSL证书开关 |
cert | 本地SSL证书路径 |
selenium 通过浏览器访问URL
使用 pip install selenium
安装
使用 from selenium import webdriver
引用
快速使用
from selenium import webdriver # 引入
driver = webdriver.Firefox() # 关联到本地火狐浏览器
driver.get("http://zoollcar.top") # 用浏览器打开网页
a = driver.find_element_by_css_selector('.site-title') # 通过css选择器选择元素
print(a.text) # 访问元素内容
!! 注意需要安装对应浏览器驱动 火狐是
geckodriver.exe
谷歌是chromedriver.exe
放到系统 path 包含的目录下
各种选择器
选择器 | |
---|---|
find_elements_by_css_selector('div.edit') | 根据css选择 |
find_elements_by_xpath('//div[@class='edit']') | 根据xpath选择 |
find_elements_by_id('id') | 根据id属性选择 |
find_elements_by_name('name') | 根据name属性选择 |
find_elements_by_link_text('www.zoollcar.top') | 根据链接到的地址选择 |
find_elements_by_tag_name('h1') | 根据元素名字选择 |
find_elements_by_class_name('edit') | 根据class选择 |
这些返回的都是符合的元素列表
如果只要第一个 将elements
替换为element
控制CSS,图片,js 显示和执行
from selenium import webdriver # 引入
fp = webdriver.FirefoxProfile() # 引入火狐配置
fp.set_preference("permissions.default.stylesheet",2) # 禁用CSS
fp.set_preference("permissions.default.image",2) # 禁用 图片显示
fp.set_preference("javascript.enabled",False) # 禁用js 测试不可用(不知道为什么)
driver = webdriver.Firefox( firefox_profile = fp ) # 关联到本地火狐浏览器
BeautifulSoup 将获得的网页字符串解析
快速使用
import requests
from bs4 import BeautifulSoup
r = requests.get('http://zoollcar.top')
soup = BeautifulSoup(r.text,'html.parser') # 解析获取到的文本
print(soup.h1.string) # 输出第一个h1标签的文本
将文本变为解析树
引入库 from bs4 import BeautifulSoup
bs4库会将任何HTML输入都变成utf‐8编码
使用 soup = BeautifulSoup(html,'html.parser')
将html字符串解析,这是自带的标准解析HTML
还可以使用下面的形式,符合不同的规则
soup = BeautifulSoup(html,'lxml')
soup = BeautifulSoup(html,['lxml','xml']])
soup = BeautifulSoup(html,'html5lib')
解析后会得到一个 bs4.BeautifulSoup 类的对象,这是一个树状的对象,每个标签都可以提取出来,提取的方法主要有:
- 搜索树
- 遍历树
- CSS选择器
访问、检索的方法
内容的访问
soup.h1
寻找标签为h1的第一个标签
soup.h1.name
标签的名字
soup.h1.attrs
标签的属性
soup.h1.string
标签内文本
这会返回两种类型的字符串
NavigableString 非注释字符串
Comment 注释字符串
soup.h1.prettify() 以人类友好方式显示html,加回车和空格
检索方法
soup.find_all(name,attrs,recursive,string,**kwargs) 寻找特定的内容!!
name 检索标签名字的检索
attrs: 标签属性值的检索,可标注属性检索 id=link1
recursive: 是否对子孙全部检索,默认True
string: 在标签内容中的检索
soup.find_all() 的简写是 soup()
方法 | 功能 |
---|---|
<soup>.find() | 搜索且只返回一个结果 |
<soup>.find_parents() | 在先辈节点中搜索,返回列表类型 |
<soup>.find_parent() | 在先辈节点中返回一个结果 |
<soup>.find_next_siblings() | 在后续平行节点中搜索,返回列表类型 |
<soup>.find_next_sibling() | 在后续平行节点中返回一个结果 |
<soup>.find_previous_siblings() | 在前序平行节点中搜索,返回列表类型,同 |
<soup>.find_previous_sibling() | 在前序平行节点中返回一个结果 |
还可以使用css检索方法
使用<soup>.select('cssSelectName')
检索到结果
遍历的方法
内容遍历方法
方法 | 功能 |
---|---|
下行遍历 | |
.contents | 子节点列表 |
.children | 子节点的迭代类型 |
.descendants | 子孙节点的迭代类型,包含所有子孙节点 |
上行遍历 | |
.parent | 节点的直属父标签 |
.parents | 节点先辈标签的迭代类型 |
平行遍历 | |
.next_sibling | 返回按照HTML文本顺序的下一个平行节点标签 |
.previous_sibling | 返回按照HTML文本顺序的上一个平行节点标签 |
.next_siblings | 迭代类型,返回按照HTML文本顺序的后续所有平行节点标签 |
.previous_siblings | 迭代类型,返回按照HTML文本顺序的前续所有平行节点标签 |
以上是关于爬虫库requests和BeautifulSoup的基本使用的主要内容,如果未能解决你的问题,请参考以下文章
Python爬虫之BeautifulSoup和requests的使用
python爬虫练习之requests+BeautifulSoup库,提取影片信息,并保存至excel
python爬虫练习之requests+BeautifulSoup库,提取影片信息,并保存至excel