爬虫库requests和BeautifulSoup的基本使用

爬虫获取数据总体上可以分为两步:

  1. 获取网页

主要用到 requests(发送网页请求) selenium(使用浏览器访问网页)

  1. 解析网页

主要用到 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 类的对象,这是一个树状的对象,每个标签都可以提取出来,提取的方法主要有:

  1. 搜索树
  2. 遍历树
  3. 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文本顺序的前续所有平行节点标签

猜你喜欢

转载自blog.csdn.net/zoollcar/article/details/86299697