Python 爬虫入门
记录一下目前会的爬虫知识
一、Requests 库
安装与导入
安装
pip install requests
导入模块
import requests
方法
请求类型
- get
- post
- put
- delete
- head
- options
示例(get请求)
r = requests.get(
url="",
headers={},
cookies="",
data={}
)
示例(post请求)
payload = dict(key1='value1', key2='value2')
r = requests.post('https://httpbin.org/post', data=payload)
输入
参数 | 类型 | 介绍 |
---|---|---|
url | str | 网站 |
params | 携带的参数 | |
headers | ||
cookies | ||
timeout | 不指定了 timeout 值,requests 不会自动进行超时处理 |
输出
方法返回为一个类型为Response(requests.Response)的对象
下面是一些常用的方法
apparent_encoding()
自动猜测网页编码
encoding(str)
指定网页编码,需要传入一个字符串参数
text()
返回网页内容
raise_for_status()
网页状态码是4或5开头时(如404),自动抛出异常
content()
以二进制的形式返回网页内容(常用于非文本内容的保存如图片)
保存图片示例
with open('test.png','wb') as f: f.write(requests.get( url="" ))
status_code()
返回网页状态码
二、BeautifulSoup 库
BeautifulSoup是一个Python库,用于从HTML和XML文件中提取数据。它提供了一种简单的方式来遍历HTML和XML文档的树形结构,并从中提取所需的数据。BeautifulSoup可以处理不规则的标记和嵌套标记,使得数据提取变得更加容易。
官方文档:点击查看
安装与导入
安装
pip install beautifulsoup4
导入
from bs4 import BeautifulSoup
初始化bs4对象
BeautifulSoup()
这样用
soup = BeautifulSoup(
markup="",
builder=""
)
参数说明
参数 | 说明 | 示例 |
---|---|---|
markup | 网页 | "str网页内容" 或open("1.html") 或requests.get("").text |
builder | 解析器 | html.parser 或 lxml |
对象属性的访问与修改
tag的属性操作方法与字典一样!
# 示例HTML
soup = BeautifulSoup('<b class="boldest">Extremely bold</b>')
# 访问元素
soup.b
<b class="boldest">Extremely bold</b>
# 属性修改与访问
soup.b["class"] = "new_boldest"
soup.b["class"]
['new_boldest']
取出文字
soup.b.text
# 不需要括号
查找元素
1. find()和
find_all()
标题对应: 返回查找到的元素的第一个 与 返回查找到的元素的列表
例子:
# 查找 标签是p 的元素
soup.find_all("p")
# 查找 标签是p、CSS类名title的元素
soup.find_all("p", "link2")
# 查找 包含id属性 的元素
soup.find_all(id=True)
# 查找 id=link2 的元素
soup.find_all(id="link2")
# 查找 标签是p、id=link2 的元素
soup.find_all("p", id="link2")
2. select_one()和select()
标题对应: 返回查找到的元素的第一个 与 返回查找到的元素的列表
通过在.select()
方法中传入字符串参数, 即可使用CSS选择器的语法查找
例子:
soup.select("p > a:nth-of-type(2)")
# [<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]
soup.select("p > #link1")
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
三、lxml 库(Xpath)
lxml是Python中一个非常流行的XML和HTML处理库,它提供了一个XPath解析器,可以使用XPath表达式来查找和提取XML和HTML文档中的数据。
XPath是一种用于在XML和HTML文档中定位元素和属性的语言。XPath表达式可以用于选择文档中的特定元素或属性,或者从文档中提取特定的数据。
安装与导入
安装
pip install lxml
导入
from lxml import etree
初始化XPath解析对象
lxml 支持XPath语法
html=etree.HTML(网页)
通过XPath查找
html.xpath('xpath表达式')
返回的一定是一个列表!
如何快速获取XPath表达式:
浏览器开发者工具-元素
右键目标元素 - 复制 - 复制XPath
XPath语法
-
选择元素:使用元素名称选择元素,例如:
<book>
选择所有<book>
元素。 -
选择属性:使用
@
符号选择属性,例如:@id
选择所有id
属性。 -
路径表达式:使用
/
符号表示从根节点开始的路径,例如:/bookstore/book
选择所有根节点为bookstore
的子节点book
。 -
选择子元素:使用
/
符号选择子元素,例如:bookstore/book/title 选择所有bookstore
元素下的book
元素下的 title 元素。 -
选择父元素:使用
..
符号选择父元素,例如:bookstore/book/..
选择所有bookstore
元素下的book
元素的父元素。 -
选择当前元素:使用
.
符号选择当前元素,例如:bookstore/book/./title
选择所有bookstore
元素下的book
元素下的当前元素title
元素。 -
选择多个元素:使用
|
符号选择多个元素,例如://book | //cd
选择所有book
和cd
元素。 -
选择具有特定属性值的元素:使用
[@attribute='value']
选择具有特定属性值的元素,例如://book[@category='children']
选择所有category
属性为children
的book
元素。 -
选择具有特定文本值的元素:使用
[text()='value']
选择具有特定文本值的元素,例如://title[text()='Harry Potter']
选择所有文本值为Harry Potter
的title
元素。 -
选择具有特定位置的元素:使用
[position()='value']
选择具有特定位置的元素,例如://book[position()=1]
选择第一个book
元素。
以上由GPT生成
四、Scrapy
Scrapy是一个用于爬取网站数据的Python框架。它提供了一种简单而强大的方式来定义爬取网站的方式,并且可以自动化地处理从网站中提取的数据。Scrapy框架包括了一些核心组件,如爬虫引擎、调度器、下载器、管道等,这些组件可以协同工作,使得爬虫的开发和维护变得更加容易。
安装与准备
安装
pip install scrapy
验证是否安装成功
在终端输入scrapy
,结果如下
> scrapy
Scrapy 2.11.0 - no active project
Usage:
scrapy <command> [options] [args]
Available commands:
bench Run quick benchmark test
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
settings Get settings values
shell Interactive scraping console
startproject Create new project
version Print Scrapy version
view Open URL in browser, as seen by Scrapy
[ more ] More commands available when run from project directory
Use "scrapy <command> -h" to see more info about a command
基本命令
命令 | 说明 | 示例 |
---|---|---|
startproject | 创建一个scrapy项目 | scrapy startproject myproject |
genspider | 创建一个爬虫(在项目下) | scrapy genspider myspider example.com(目标网址) |
runspider | 运行这个爬虫 | scrapy runspider myspider.py |
其他
学习scrapy没什么意思,用处也不大,更多是作为教学工具,我就不往下写了
五、Selenium
Selenium是一个用于自动化Web应用程序测试的强大工具。它提供了一个用于模拟用户在浏览器中操作的框架,可以用于测试Web应用程序的功能性和性能。
导入包
pip install selenium
下载浏览器驱动
edge https://msedgewebdriverstorage.z22.web.core.windows.net
Chrome https://chromedriver.storage.googleapis.com/index.html
Firefox https://github.com/mozilla/geckodriver/releases
Opera https://github.com/operasoftware/operachromiumdriver/releases
下载符合自己浏览器的驱动(360搜狗什么国产浏览器就不要爬了)
驱动配置
两种方式选择其一
-
添加到系统的
Path
目录 -
在python代码中声明驱动路径
webdriver.Chrome(executable_path='驱动目录')
待写。。。