1. 背景
最近在工作中有需求运用到爬虫的当地,需求依据 Gitlab + Python 完成一套守时爬取数据的工具,所以借此机会,针对 Python 爬虫方面的常识进行了学习,也算 Python 爬虫入门了。
需求了解的常识点:
- Python 根底语法
- Python 网络恳求,requests 模块的根本运用
- BeautifulSoup 库的运用
- 正则表达式
- Selenium 的根本运用
下面针对上面的每部分做个简略的介绍。
2. Python 根底语法
学习任何一门编程言语都有必要掌握其语法常识,Python 也不例外。假如有其它变成言语根底,上手 Python 仍是十分快的。
2.1 变量
在 Python 中,界说一个变量的操作分为两步:首要要为变量起一个姓名,称为变量的命名;然后要为变量指定其所代表的数据,称为变量的赋值。这两个步骤在同一行代码中完结。
version = '1'
Python 中的变量命名标准与其它开发言语差不多,根本的规矩如下:
- 变量名能够由恣意数量的字母、数字、下划线组合而成,可是有必要以字母或下划线最初,不能以数字最初。
- 不要用 Python 的保留字或内置函数来命名变量。例如,不要用 import 来命名变量,由于它是 Python 的保留字,有特殊的意义。
- 变量名对英文字母区别大小写。例如,D 和 d 是两个不同的变量。
2.2 数据类型
Python 中有 6 种根本数据类型:数字(Numbers)、字符串(String)、列表(List)、字典(Dictionary)、元组(Tuple)和调集。
2.2.1 数据类型
在 Python 中界说变量后需求及时指明对应的数据类型。同时也能够运用 del 变量名 删去目标引用。
num = 0
pi = 3.14
name = "abc"
# 界说列表 [],列表元素能够修正
list = [12, 2, 212, 44, 5, 6]
dic = {
"k1": "v1",
"k2": "v2",
}
# 调集类型用 set 标识, 创建运用 { } 或许 set()
s1 = {1, 2, 3, 3, 2, 2, 2, 1, "1"}
# 元组用 () 表明,元组的元素不能修正
tuple = ( 'runoob', 786 , 2.23, 'john', 70.2 )
del s1
对于每种数据类型,都有一些常用的办法:
数据类型 | 办法 |
---|---|
字符串 |
– [ : ]:截取字符串中的一部分(切片),遵从左闭右开准则; – []:经过索引获取字符串中字符; – in:假如字符串中包含给定的字符回来 True; – not in:成员运算符 – 假如字符串中不包含给定的字符回来 True – capitalize():将字符串的榜首个字符转换为大写; – endswith(suffix, beg=0, end=len(string)):检查字符串是否以指定的字符串结束,假如是,回来 True,否则回来 False; – find(str, beg=0, end=len(string)):检测 str 是否包含在字符串中,假如包含,回来开端的索引值,否则回来-1; – index(str, beg=0, end=len(string)):跟find()办法一样,只不过假如str不在字符串中会报一个反常; – len(string):回来字符串长度; – replace(old, new [, max]):把将字符串中的 old 替换成 new,假如 max 指定,则替换不超越 max 次; – rstrip():删去字符串结束的空格或指定字符; – split(str=””, num=string.count(str)):以 str 为分隔符截取字符串,假如 num 有指定值,则仅截取 num+1 个子字符串。 |
列表/元组 |
– len(list):列表元素个数; – list(seq):将序列(元组,调集等)转换为列表; – list.append(obj):在列表结束增加新的目标; – list.index(obj):从列表中找出某个值榜首个匹配项的索引方位; – list.remove(obj):移除列表中某个值的榜首个匹配项; – list.clear():清空列表。 |
字典 |
– len(dict):计算字典元素个数,即键的总数; – key in dict:假如键在字典dict里回来true,否则回来false; – radiansdict.items():以列表回来可遍历的(键, 值) 元组数组; – radiansdict.keys():以列表回来一个字典一切的键; – radiansdict.values():以列表回来字典中的一切值。 |
2.2.2 类型转换
字符串类型转换经过 str() 函数能够将一个变量转换为字符串类型。
- int(x) 将x转换为一个整数。
- float(x) 将x转换到一个浮点数。
- complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。
- complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。
- str(x) 将目标 x 转换为字符串。
2.3 根底运算符
在 Python 中运算符根本与其它开发言语一致,常用的运算符有算术运算符、字符串运算符、比较运算符、赋值运算符和逻辑运算符。
算术运算符
比较运算符
逻辑运算符
2.4 操控句子
Python 的操控句子分为条件句子和循环句子,前者为 if 句子,后者为 for 句子和 while 句子。
2.4.1 if 句子
if 句子主要用于条件判断,满足特定条件履行句子。
if 条件: # 留意不要遗失冒号
代码1 # 留意代码前要有缩进
else: # 留意不要遗失冒号
代码2 # 留意代码前要有缩进
一个简略的示例:
grade = 60
if grade >= 60:
print("及格")
else:
print("不及格")
2.4.2 for 循环
for 句子常用于完结指定次数的重复操作
for i in 序列: # 留意不要遗失冒号
要重复履行的代码 # 留意代码前要有缩进
简略示例:
numbers = [12, 2, 212, 44, 5, 6]
for item in numbers:
print(item)
2.4.3 while 句子
while 句子用于在指定条件成立时重复履行操作。
while 条件: # 留意不要遗失冒号
要重复履行的代码 # 留意代码前要有缩进
简略示例:
a = 60
while a < 70:
print(a)
a = a + 1
2.5 函数
Python 供给了诸多的内置函数,比方 str()、int() 等,可是在开发时,也需求经常用到自界说函数。
在 Python 中运用 def 关键字界说一个函数。
def 函数名(参数):
完成函数功用的代码
假如需求回来值,则需求运用 return 进行回来。
def data_transform():
# 具体的完成逻辑
return True
2.6 模块导入
要运用模块,就需求装置和导入模块。模块的两种导入办法:import 句子导入法和 from句子导入法。
- import 语法会导入模块内一切办法,一般假如用包的办法较多能够挑选;
- from 模块名 import 函数名:导入某块中某个函数,
import math # 导入math模块
import turtle # 导入turtle模块
from math import sqrt # 导入math模块中的单个函数
from turtle import forward, backward, right, left # 导入turtle模块中的多个函数
模块的装置运用 pip install 指令:
pip install "SomeProject"
3. 网络恳求与数据解析
爬虫必定需求了解根底的网络恳求和根底的 HTML 常识,能够知道根底的 HTML 标签。
3.1 requests 包
requests 包能够模仿浏览器建议 HTTP 或 HTTPS 协议的网络恳求,从而获取网页源代码。
运用也比较简略,先装置模块:pip3 install requests.
get 恳求
比方抓取百度主页的信息。
import requests
response = requests.get(url='https://www.baidu.com')
print(response.text)
输出如下:
**post **恳求
# 测验恳求地址
req_url = "https://juejin.org/post"
# 表单数据
formdata = {
'username': 'admin',
'password': 'a123456',
}
# 增加恳求头
req_header = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
}
# 建议恳求
response = requests.post(
req_url,
data=formdata,
headers=req_header
)
print(response.text)
经过 requests 模块发送网络恳求,十分简略,容易上手。
3.2 BeautifulSoup 数据解析
BeautifulSoup 模块是一个 HTML/XML 解析器,主要用于解析和提取 HTML/XML 文档中的数据。该模块不仅支撑 Python 标准库中的 HTML 解析器 lxml,而且支撑许多功用强壮的第三方解析器。
在运用前先经过 pip 指令装置模块:pip install beautifulsoup4
。
3.2.1 简略运用
以恳求百度主页为例。
if __name__ == '__main__':
url = "https://www.baidu.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
print(soup.prettify())
打印输出以下信息:
<!DOCTYPE html>
<!--STATUS OK-->
<html>
<head>
<meta content="text/html;charset=utf-8" http-equiv="content-type"/>
<meta content="IE=Edge" http-equiv="X-UA-Compatible"/>
<meta content="always" name="referrer"/>
<link href="https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css" rel="stylesheet" type="text/css"/>
<title>
</title>
</head>
<body link="#0000cc">
<div id="wrapper">
<div id="head">
<div class="head_wrapper">
<div class="s_form">
<div class="s_form_wrapper">
<div id="lg">
<img height="129" hidefocus="true" src="https://www.baidu.com/img/bd_logo1.png" width="270"/>
</div>
<form action="//www.baidu.com/s" class="fm" id="form" name="f">
<input name="bdorz_come" type="hidden" value="1"/>
<input name="ie" type="hidden" value="utf-8"/>
<input name="f" type="hidden" value="8"/>
<input name="rsv_bp" type="hidden" value="1"/>
<input name="rsv_idx" type="hidden" value="1"/>
<input name="tn" type="hidden" value="baidu"/>
<span class="bg s_ipt_wr">
<input autocomplete="off" autofocus="autofocus" class="s_ipt" id="kw" maxlength="255" name="wd" value=""/>
</span>
<span class="bg s_btn_wr">
<input autofocus="" class="bg s_btn" id="su" type="submit" value=""/>
</span>
</form>
</div>
</div>
...
</div>
</div>
</div>
</body>
</html>
经过 BeautifulSoup 库能够将恳求的网址信息依照标签进行转换展现。下面学习 BeautifulSoup 供给的标签操作办法。
3.2.2 查找标签
依照上一节中的百度主页为例,下面分别介绍 BeautifulSoup 中常用的办法。
查找指定标签名
在网页源码中,存在许多类型的标签。经过标签名进行定位只能回来其间的榜首个标签。
比方咱们查找定位 标签。
if __name__ == '__main__':
url = "https://www.baidu.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
print(soup.input)
输出结果:
<input name="bdorz_come" type="hidden" value="1"/>
查找指定特点的标签
标签的特点有:name、class、id 等,咱们运用 find 或 find_all 办法查找标签对应的一切特点。
import requests
from bs4 import BeautifulSoup
if __name__ == '__main__':
url = "https://www.baidu.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
# print(soup.prettify())
# 查找 class 特点为 bg s_ipt_wr 的标签
bg_tags = soup.find_all(class_='bg s_ipt_wr')
for tag in bg_tags:
print(tag) # 输出 <span class="bg s_ipt_wr"><input autocomplete="off" autofocus="autofocus" class="s_ipt" id="kw" maxlength="255" name="wd" value=""/></span>
# 查找 name = rsv_idx
idx = soup.find(attrs={'name': 'rsv_idx'})
print(idx) # 输出 <input name="rsv_idx" type="hidden" value="1"/>
在上面的示例中,咱们经过 find_all 办法查找一切 class_= 'bg s_ipt_wr'
的标签。由于 class 这个单词自身是 Python 的保留字,所以 BeautifulSoup 模块中的 class 特点在结束增加了下划线来进行区别。其他标签特点,如 id 特点,则没有增加下划线。
经过标签名+特点查找
经过指定标签名 + 特点值能够完成更准确的查找。
if __name__ == '__main__':
url = "https://www.baidu.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
# print(soup.prettify())
# 查找 input 标签且特点 name = rsv_idx
idx = soup.find('input', attrs={'name': 'rsv_idx'})
print(idx) # 输出 <input name="rsv_idx" type="hidden" value="1"/>
3.2.3 挑选标签
在上一小节中介绍了 find 办法用于查找标签,运用 select() 函数能够依据指定的挑选器回来一切契合条件的标签。常用的挑选器有 id 挑选器、class 挑选器、标签挑选器和层级挑选器。
1. 标签挑选器
依据指定的标签进行挑选。在 find 中依据指定标签名查找时只会回来榜首个匹配项。运用 select 标签回来一切。
if __name__ == '__main__':
url = "https://www.baidu.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
# print(soup.prettify())
input_tag = soup.select('input')
print(input_tag)
# 输出 [<input name="bdorz_come" type="hidden" value="1"/>, <input name="ie" type="hidden" value="utf-8"/>]
在 select 中直接查找对应的标签名,会输出一切的标签。
2. id 挑选器
id 挑选器是依据 id 值查找对应的标签。格局 ‘#id值’
if __name__ == '__main__':
url = "https://www.baidu.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
# print(soup.prettify())
input_tag = soup.select('#kw')
print(input_tag)
# 输出 [<input autocomplete="off" autofocus="autofocus" class="s_ipt" id="kw" maxlength="255" name="wd" value=""/>]
上面的示例中,查找 id 值为 kw 的标签。留意输出是列表方式。
3. class 挑选器
class 挑选器依据 class 特点值查找对应的标签,格局为 ‘.class特点值’
if __name__ == '__main__':
url = "https://www.baidu.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
# print(soup.prettify())
input_tag = soup.select('.s_ipt')
print(input_tag)
# 输出 [<input autocomplete="off" autofocus="autofocus" class="s_ipt" id="kw" maxlength="255" name="wd" value=""/>]
上面的示例中,查找 class 值为 s_ipt 的标签。留意输出是列表方式。
4. 层级挑选器
在 HTML 中标签嵌套很常见,标签在不同的层级形成嵌套结构。经过 标签>标签
这种指向结构来定位。
<div class="s_form_wrapper">
<div id="lg">
<img height="129" hidefocus="true" src="https://www.baidu.com/img/bd_logo1.png" width="270"/>
</div>
<form action="//www.baidu.com/s" class="fm" id="form" name="f">
<input name="bdorz_come" type="hidden" value="1"/>
<input name="ie" type="hidden" value="utf-8"/>
<input name="f" type="hidden" value="8"/>
<input name="rsv_bp" type="hidden" value="1"/>
<input name="rsv_idx" type="hidden" value="1"/>
<input name="tn" type="hidden" value="baidu"/>
<span class="bg s_ipt_wr">
<input autocomplete="off" autofocus="autofocus" class="s_ipt" id="kw" maxlength="255" name="wd" value=""/>
</span>
<span class="bg s_btn_wr">
<input autofocus="" class="bg s_btn" id="su" type="submit" value=""/>
</span>
</form>
</div>
运用上面的示例数据,咱们来验证。
if __name__ == '__main__':
url = "https://www.baidu.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
# 查找一切 <div> 标签下 <div> 标签的 id 特点值为 lg 的标签
div_tag = soup.select('div>div>#lg')
# 输出结果 [<div id="lg"> <img hidefocus="true" src="https://www.baidu.com/img/bd_logo1.png" /> </div>]
print(div_tag)
# 查找 <form> 标签下一切的 input 标签
input_tag = soup.select('form>input')
print(input_tag)
# 输出结果 [<input name="bdorz_come" type="hidden" value="1"/>, <input name="ie" type="hidden" value="utf-8"/>, <input name="f" type="hidden" value="8"/>, <input name="rsv_bp" type="hidden" value="1"/>, <input name="rsv_idx" type="hidden" value="1"/>, <input name="tn" type="hidden" value="baidu"/>]
form_tag = soup.select('div>form span')
print(form_tag)
“>” 在层级挑选器中表明向下找一个层级,中心不能有其他层级。假如中心有空格表明中心能够有多个层级。
3.2.4 提取内容和特点
找到标签后,咱们需求读取标签对应的内容或许特点。
提取标签内容
获取标签后咱们需求查找标签中的内容,能够运用 string 或 text 来提取。string 特点回来的是指定标签的直系文本,即直接存在于该标签中的文本,而不是存在于该标签下的其他标签中的文本。text 特点回来的则是指定标签下的一切文本。
if __name__ == '__main__':
url = "https://www.baidu.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
# 查找一切 <div> 标签下 <div> 标签的 id 特点值为 lg 的标签
div_tag = soup.select('div>a')
print(div_tag[0].string)
print(div_tag[0].text)
从标签中提取特点
对于找到的标签,提取特点直接运用 tag['特点表']
即可。
if __name__ == '__main__':
url = "https://www.baidu.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
div_tag = soup.select('form>input') # [<input name="bdorz_come" type="hidden" value="1"/>]
print(div_tag[0]['name']) # bdorz_come
print(div_tag[0]['type']) # hidden
至此,咱们根本完结了对 beautifulSoup 库的学习。
4. 正则表达式
正则表达式是一种用于匹配和操作文本的强壮工具,它是由一系列字符和特殊字符组成的形式,用于描绘要匹配的文本形式。正则表达对网页源代码的字符串进行匹配,从而提取出需求的数据。
4.1 一般字符
一般字符包含没有显式指定为元字符的一切可打印和不可打印字符。这包含一切大写和小写字母、一切数字、一切标点符号和一些其他符号。
符号 | 描绘 |
---|---|
\W | 匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。 |
\w | 匹配包含下划线的任何单词字符。等价于“[A-Za-z0-9_]”。 |
\s | 匹配任何空白字符,包含空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。 |
\S | 匹配任何非空白字符。等价于[^ \f\n\r\t\v]。 |
\d | 匹配一个数字字符。等价于[0-9]。 |
\D | 匹配一个非数字字符。等价于[^0-9]。 |
示例代码:
if __name__ == '__main__':
str = 'kdd199ok98 a123 343'
print(re.findall('\W', str)) # 匹配任何非单词字符,[' ', ' ']
print(re.findall('\w', str)) # 匹配任何单词字符,['k', 'd', 'd', '1', '9', '9', 'o', 'k', '9', '8', 'a', '1', '2', '3', '3', '4', '3']
print(re.findall('\S', str)) # 匹配任何非空白字符,['k', 'd', 'd', '1', '9', '9', 'o', 'k', '9', '8', 'a', '1', '2', '3', '3', '4', '3']
print(re.findall('\s', str)) # 匹配空白字符,[' ', ' ']
print(re.findall('\D', str)) # 匹配非数字,['k', 'd', 'd', 'o', 'k', ' ', 'a', ' ']
print(re.findall('\d', str)) # 匹配数字,['1', '9', '9', '9', '8', '1', '2', '3', '3', '4', '3']
4.2 元字符
元字符是正则表达式中有特殊意义的字符,能够设置字符的匹配形式。
符号 | 描绘 |
---|---|
$ | 匹配输入字符串的结束方位。假如设置了 RegExp 目标的 Multiline 特点,则 也匹配′n′或′r′。要匹配也匹配 ‘\\n’ 或 ‘\\r’。要匹配 字符自身,请运用 \$。 |
( ) | 标记一个子表达式的开端和结束方位。子表达式能够获取供以后运用。要匹配这些字符,请运用 \( 和 \)。 |
* | 匹配前面的子表达式零次或屡次。要匹配 * 字符,请运用 \*。 |
+ | 匹配前面的子表达式一次或屡次。要匹配 + 字符,请运用 \+。 |
. | 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请运用 \. 。 |
[ | 标记一个中括号表达式的开端。要匹配 [,请运用 \[。 |
? | 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请运用 \?。 |
\ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n’ 匹配字符 ‘n’。’\n’ 匹配换行符。序列 ‘\\’ 匹配 “\”,而 ‘\(‘ 则匹配 “(“。 |
匹配输入字符串的开端方位,除非在方括号表达式中运用,当该符号在方括号表达式中运用时,表明不接受该方括号表达式中的字符调集。要匹配 ^ 字符自身,请运用 \^。 | |
{n} | n 是一个非负整数。匹配确认的 n 次。 |
{n,} | n 是一个非负整数。至少匹配n 次。 |
{n,m} | m 和 n 均为非负整数,其间 n <= m。最少匹配 n 次且最多匹配 m 次。 |
示例代码:
if __name__ == '__main__':
str = 'akdd1d199ok98 d123 3438'
print(re.findall('8$', str)) # 匹配以 8 结束的字符,['8']
print(re.findall('3$', str)) # 匹配以 3 结束的字符,[]
print(re.findall('^a', str)) # 匹配以 a 最初的字符,['a']
print(re.findall('^d', str)) # 匹配以 d 最初的字符,[]
print(re.findall('(d1)?', str)) # 匹配 d1 零次或一次的字符,['', '', 'd1', '', '', '', '', '', '', '', 'd1', '', '', '', '', '', '', '', '']
print(re.findall('(d1)+', str)) # 匹配 d1 一次或屡次的字符,['d1', 'd1']
print(re.findall('(d1)*', str)) # 匹配 d1 零次或屡次的字符,['', '', 'd1', '', '', '', '', '', '', '', 'd1', '', '', '', '', '', '', '', '']
print(re.findall('(d1){2,}', str)) # 匹配 d1 最少 2 次的字符,['d1']
print(re.findall('(d1){1,2}', str)) # 匹配 d1 最少 1 次,最多 2 次的字符,['d1', 'd1']
print(re.findall('(d.d)', str)) # 匹配 (d.d) 的字符,['d1d']
print(re.findall('(d?d)', str)) # 匹配 (d?d) 的字符,['dd', 'd', 'd']
print(re.findall('[ad]', str)) # 匹配字符调集 [ad] 的字符,['a', 'd', 'd', 'd', 'd']
print(re.findall('(ad)', str)) # 匹配表达式 ad ,[]
正在表达式根底,可是想灵活运用起来还需求多加练习,太灵活能够拼装许多形式。
5. Selenium 的根本运用
经过 requests 模块能够完成对一些静态网页的恳求,对于一些动态与浏览器需求交互的地址则不能满足。而 Selenium 模块则能操控浏览器发送恳求,并和获取到的网页中的元素进行交互,因此,只要是浏览器发送恳求能得到的数据,Selenium 模块也能直接得到。
5.1 环境装置
运用 Selenium 模块需求先下载和装置浏览器驱动程序,然后在编程时经过 Selenium 模块实例化一个浏览器目标,再经过浏览器目标拜访网页和操作网页元素。
5.1.1 装置 Selenium 模块
装置比较简略,直接运用 pip install selenium
装置就行了。比较重要的是装置浏览器驱动程序。
2.1.2 装置浏览器驱动程序
在网址 chromedriver.storage.googleapis.com/index.html 中能够下载对应版别的浏览器驱动程序。
查看自己浏览器版别,在浏览器中输入:chrome://version/
挑选对应的电脑端体系,比方我是 Mac 体系,下载对应的即可。解压之后放到环境路径或许项目中都行,只要在运用时指定对应的环境即可。
5.1.3 翻开页面
这里已翻开百度网站为例。我将 webdriver 放到项目路径中。
from selenium import webdriver
if __name__ == '__main__':
browser = webdriver.Chrome(executable_path='./chromedriver_mac64/chromedriver')
browser.get('https://www.baidu.com')
5.2 常见 API
5.2.1 浏览器操作
webdriver 回来的 browser 目标中,供给了丰富的 API 用于操作浏览器。
browser.maximize_window() | 最大化浏览器 |
---|---|
browser.current_url | 当时网页 url |
browser.get_cookie() | 当时网页用到的 cookie 信息 |
browser.name | 当时浏览器驱动称号 |
browser.title | 当时网页标题 |
browser.page_source | 获取当时网页源代码 |
browser.current_window_handle | 获取当时网页的窗口 |
browser.refresh() | 刷新当时网页 |
browser.quit() | 封闭浏览器 |
browser.close() | 封闭当时网页 |
browser.back() | 回来上一页 |
5.2.2 查找标签
完结了网页的拜访后,假如需求模仿用户操作网页元素,则需求先经过标签来定位网页元素。
find_element(self, by=By.ID, value=None)� 查找元素,其间 By.ID 是枚举类型:
- ID:经过元素 id 定位;
- XPATH:经过 xpath 表达式定位;
- LINK_TEXT:经过完好超链接定位;
- PARTIAL_LINK_TEXT:经过含糊超链接定位;
- NAME:经过元素 name 定位;
- TAG_NAME:经过标签定位;
- CLASS_NAME:经过 class 进行定位;
- CSS_SELECTOR:经过 css 挑选器进行定位。
运用示例:
from selenium import webdriver
from selenium.webdriver.common.by import By
if __name__ == '__main__':
browser = webdriver.Chrome(executable_path='./chromedriver_mac64/chromedriver')
browser.get('https://www.baidu.com')
tag1 = browser.find_element(by=By.ID, value='form')
print(tag1.get_attribute("class"))
找到标签后,就能够经过 get_attribute 办法获取对应的特点值。
5.3 模仿鼠标操作
常用的鼠标操作有单击、双击、右击、长按、拖动、移动等,模仿这些操作需求用到 Selenium 模块中的ActionChains 类。它供给了以下办法:
- click():模仿点击;
- double_click():模仿双击;
- click_and_hold():鼠标长按;
- click_and_hold():开释鼠标按;
下面以翻开百度主页的图片链接为例:
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
if __name__ == '__main__':
browser = webdriver.Chrome(executable_path='./chromedriver_mac64/chromedriver')
browser.get('https://www.baidu.com')
# 找到图片链接
alink = browser.find_element(by=By.LINK_TEXT, value='图片')
print(alink.get_attribute("href"))
actions = ActionChains(browser)
actions.click(alink).perform()
运转成功后,会首要翻开百度主页,然后跳转到百度图片页面。
6. 总结
在本次的实践过程中,体会到运用 Python 爬虫的方便性,在学习的过程中主要参照《零根底学Python爬虫、数据剖析与可视化从入门到精通》这本书,总体也算作快速入门了。
参阅链接:
- www.runoob.com/regexp/rege…