Python爬取Web信息的四个主要模块(轮子):
(1)webbrowser:是Python自带的,用来打开浏览器指定页面
(2)requests:从因特网上下载文件和网页
(3)Beautiful Soup:解析HTML,即网页编写的格式
(4)selenium:启动并控制一个Web浏览器,该模块能够实现填写表单,模拟鼠标在页面的点击
webbrowser模块
能打开浏览器的模块webbrowser,它的open函数可以做一些有意思的事情。例如从sys.argv或者剪切板读入地址,然后直接在Google地图打开相应的地图页面。
import webbrowser #python模块,非第三方模块,不需要下载,直接使用
import pyperclip #第三方模块
#启用电脑默认的浏览器打开网页
address = pyperclip.paste()
webbrowser.open('http://www.google.cn/maps/place/'+address)
requests模块
很强大的一个模块,从Web直接下载文件(HTML,txt,zip等等)
【Tips】爬虫爬取网站时,会被部分网站阻止,因为不更改请求头的话,请求头会默认为Python。
可用的请求头为:
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
【实例】
import requests
from bs4 import BeautifulSoup #requests和bs4都为第三方模块
#请求头
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
#接受返回的HTML文件
res = requests.get('https://blog.csdn.net/qq_31278903',headers=header)
#检查下载状态,下载失败时会停止
print(res.raise_for_status())
#下载成功后会会保存在text变量中
#print(res.text)
#BeautifulSoup解析HTML,返回一个BeautifulSoup对象
soup = BeautifulSoup(res.text,'html.parser')
#select方法,p .class #id,返回的是Tag对象,有对应的HTML标签,也有attrs属性
title = soup.select('title')[0]
print(title.text)
li = list(title.text)
#此部分截取出Title标签中的名称
print("".join(li[1:5]))
【结果】
【Tips】requests获取的信息自动保存在text当中
Beautiful Soup模块(也叫‘bs4’模块)
BeautifulSoup模块主要用于HTML的解析
常用css选择器
soup.select('div') | 所有名为<div>的元素 |
soup.select('#author') | 带有id属性为author的元素 |
soup.select('.notice') | 所有使用CSS class属性名为notice1的元素 |
soup.select('div span') | 所有在<div>元素之内的<span>元素 |
soup.select('div >span') | 所有直接在<div>元素之内的<span>元素,中间没有其他元素 |
soup.select('input[name]') | 所有名为<input>,并有一个name属性,其值无所谓的元素 |
soup.select('input[type="button"]') | 所有名为<input>,并有一个type属性,其值为button的元素 |
【实例】
res = requests.get("http://www.baidu.com")
# print(res.text)
# print(res.raise_for_status())
noStarchSoup = bs4.BeautifulSoup(res.text)
# print(noStarchSoup)
【结果】
selenium模块
该模块可以让Python直接控制浏览器,实际点击链接,填写登录信息,可以实现正常的人机交互
【常用的方法】
(1)启动selenium控制的浏览器
【实例】
browser = webdriver.Firefox()
type(browser)
browser.get("http://www.baidu,com")
(2)在页面内寻找元素
【常用方法】
- browser. find element by class name(name) 使用CSS类name的元素
- browser. find elements by class name(name)
- browser. find element by css selector(selector) 匹配 CSS selector的元素
- browser. find elements by css selector(selector)
- browser. find element by id(id) 匹配d属性值的元素
- browser.find elements by id(id)
- browser. find element by link text(text) 完全匹配提供的text的<a>元素
- browser. find elements by link text( text)
- browser. find element by partial link text(tex) 包含提供的text的<a>元素
- browser. find elements by partial link text(text)
- browser. find element by name(name) 匹配mame属性值的元素
- browser. find elements by name(name)
- browser. find element by tag name(name) 匹配标签name的元素
- browser. find elements by tag name(name) (大小写无关,<a>元素匹配a和A
【Tips】查找返回的是WebElement对象,其包含以下属性:
- tag_name : 标签名
- get_attribute(name) : 该元素name属性的值
- text : 该元素内的文本
- clear() : 对于文本字段或文本区域元素,清除其中的输入文本
- is_displayed : 如果该元素可见,返回True,否则False
- is_enabled : 对于输入元素,如果该元素启用,返回True
- is_selected : 对于复选框或单选框元素,如果该元素被选中,选择True
- location : 一个字典,包含键‘x’和‘y’,表示该元素在该页面上的位置
(3)点击页面
(4)填写并提交表单
(5)发送特殊值
【selenium.webdriver.common.keys模块中的常用变量】
- Keys.DOWN, Keys.UP, Keys.LEFT. Keys.RIGHT 键盘箭头键
- Keys ENTER, Keys. RETURN 回车和换行键
- Keys.HOME. Keys. END PAGE DOWN, Keys. PAGE UP Home键、End键、 PageUp键和 Page Down键
- Keys. ESCAPE, Keys BACK SPACE, Keys. DELETE Esc、 Backspace和字母键
- Keys. F1, Keys. F2,……, Keys. 键盘顶部的F1到F2键 F12Tab键
- Keys. TAB TAB键
(6)点击浏览器按钮
【常用方法】
browser.back()/forward()/refresh()/quit();返回/前进/刷新/关闭窗口
整理自《Python快速上手》第十一章 从Web抓取信息
Wimb