数据采集工具
urllib库
简介
它是python的标准库,提供了一系列用于操作url的功能,是模拟浏览器发送请求的库
模块
request:
常用方法
urlopen(url,data):向服务器发送请求
Request(url,headers):构建请求头信息
error
功能:urllib.error可以接收有urllib.request产生的异常。
常见类
URLError
1.网络故障导致网络不通
2.服务器连接失败
3.找不到指定服务器
HTTPError
它是URLError的子类,当这两个同时捕获异常的时候,必须把HTTPError写在URLError上面。
parse
简介
urllib中对url进行解析的模块
常用方法
urlencode(字典格式的数据)
将字典格式的数据转换成:key=value&key=value的格式
quote(url)
将中文转化为%XXX的格式
unquote(url)
将%xxx格式转化为中文
robotparse
urllib爬虫步骤
1.导入模块 import urllib.request
2、使用urllib.request.urlopen(url)向服务器发送请求
3. 使用read()读取网页内容(字节串),并通过decode()进行转码(将字节串转化为字符串)
实例:豆瓣中通过输入关键字和编号来获取部分数据
get请求方式的步骤:
1.将url中?后的内容进删除
2.将?后的数据分别提取属性名和属性值,并将其存放到字典中
3.使用urllib.parse.urlencode()将字典进行转码
4.将url与转码后的内容进行拼接
5.用拼接后的url向服务器发送请求
实例:肯德基门店信息数据采集
post请求步骤
1.将参数存储到字典中
2.使用urllib的解析模块对字典数据进行解析(注意:进行encode()转码)
3.在urllib中urlopen()方法中将解析后的数据作为data参数的参数值。
扩展知识
AJAX
简介:异步的javascript和XML
特点:在不重复加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。
工作原理
请求方式
get方式
简单快捷,大部分情况都能使用,主要应用在数据传输量少时。
post方式
1.无法使用缓存文件(更新服务器上的文件或数据库)
2.向服务器发送大量数据时使用(post方式无数据量限制)
3.当发送未知字符时post方式比get方式稳定。
JSON
简介:javascript对象表示法,是存储和交换文本信息的语法
是轻量级的文本数据交换格式,使用javascript语法来
描述数据对象。
语法
1.对象在{ key:value}中定义
2.数据在[数据 ]中定义
3.数据由逗号隔开
4.数据在名称/值对中。
python处理json字符串方法
1.导入json模块:import json
2.调用该模块的方法
json.dumps():将字典或列表格式转化为json字符串
json.loads():将json字符串格式转化为字典
json.dump():将字典或列表格式转化为json字符串并写入文件中。
json.load():将json字符串格式转化为字典并写入文件中
例:json.dump(dict,open("文件名",“打开方式",编码))
requests
简介
requests是python第三方库,是基于urllib基础上编写的爬虫库。
安装方法
pip install requests
使用方法
1.导入模块:import requests
2.使用get/post/put/head()方法向服务器发送请求
3.读取网页内容
常用方法
requests.get(url,headers,params,data,cookies,proxies,verity,file,timeout,auth)
参数说明:
url:向服务器发送请求的网址
headers:请求的头信息
params:get请求参数
data:post请求参数
cookies:身份信息存储
proxies:IP代理
verity:证书验证
file:文件上传
timeout:设置超时时间
auth:指定用户用户名和密码认证登录
响应信息
r.text:以字符串格式获取网页内容
r.content:以字节串格式获取网页内容
r.url:返回请求url
r.stauts_code:获取响应状态码
200:请求成功
401:请求要求身份验证
404:找不到请求网页
403:服务器拒绝访问
503:服务器关闭维修状态
r.reason:获取状态码返回的信息
r.encoding:返回编码方式
r.cookies:获取网页的cookies
请求信息
r.request.url/headers/method(请求方法)/cookies
selenium
简介
selenium是python的第三方库,对外提供
接口可操作浏览器,完成浏览器的自动化操作。
安装
前期准备
1.查看谷歌浏览器版本(右上角—帮助—版本)
子主题 1
2.查找与本机浏览器版本对应的驱动器版本
https://blog.csdn.net/huilan_same/article/details/51896672
3.下载谷歌驱动器 chromedriver.exe
http://chromedriver.storage.googleapis.com/index.html
安装
pip install selenium
基本操作
1.导入webdriver模块
from selenium import webdriver
2.定义浏览器对象
browser = webdriver.Chorme(r'驱动器路径')
3.打开浏览器
browser.get(url)
对html元素的获取
1.find_element_by_id():根据id名获取元素
2.find_element_by_class_name():根据class名获取元素
3.find_element_by_name():通过name属性名获取元素
4.find_element_by_link_text():
通过超链接文本名称获取元素
5.find_element_by_partical_link_text():
通过部分链接文本获取元素
6.find_element_by_tag_name():
通过标签名获取元素
7.find_element_by_xpath():
通过xpath路径获取数据
8.find_element_by_css_selector():
通过css选择器获取元素
常用方法与属性
方法
get():根据url打开网页
send_keys(“输入文本”):向文本框中输入数据
click():单击选中元素
save_screenshot():将网页保存成图片存到外部文档中
implicitly_wait():webdriver提供的一个隐性等待的时间,在一个时间段内只能的等待,超时则抛出异常
属性
page_source:获取html文档代码
url:获取网页的url
title:获取网页的标题
转换问题解决
switch_to.frame()
问题描述:当一个网页中嵌入另一个独立页面时,
需要切换到该独立页面才能获取页面元素。
解决方法:browser.switch_to.frame(id/name/xpath)
switch_to.window()
问题描述:当通过点击超链接时打开一个新窗口,如果获取新窗口的元素时,需要切换到该窗口。
解决方法:
1.获取当前窗口的窗口标志(句柄)
s_window = browser.current_window_handle
2.获取所有打开窗口的句柄
all_windows = browser.window_handlers
3.遍历所有窗口,判断新打开窗口不为之前窗口时,切换到新窗口
for h in all_windows:
if h != s_window:
browser.switch_to.window(h)
常用属性与方法
current_window_handle:获得当前窗口标志(句柄)。
window_handles:返回所有窗口的句柄到当前会话。
switch_to.window():用于切换到相应的窗口
close():关闭当前窗口
quit():关闭所有窗口
switch_to_alert()
问题描述:当通过触发网页元素弹出警告框alert()、prompt()、comfirm()时,需要通过警告框
解决办法:browser.switch_to_alert()
常用方法
accept():接受警告内容,点击确定按钮
dismiss():解散现有警告框,点击取消按钮。
send_keys():向prompt()警告框中输入内容
操作鼠标与键盘
操作鼠标
1.导入ActionChains类
from selenium.webdriver.common.action_chains import ActionChains
2.创建该类的对象
action = ActionChains(browser)
3.调用该类中的方法对鼠标进行操作
格式:action.鼠标操作方法
鼠标点击
click():单击鼠标左键
context_click():单击鼠标右键
double_click():双击鼠标左键
click_and_hold():按住鼠标左键
鼠标移动
move_to_element():将鼠标移动到指定元素
move_to_offset(x,y):按照偏移量移动鼠标
鼠标拖拽
drag_and_drop(source,target):将元素从起点source移动到终点target
drag_and_drop_by_offset(source,xoffset,yoffset):按照坐标移动
操作键盘
解决select标签问题
1.导入Select类
from selenium.webdriver.support.select import Select
2.创建对象
s = Select(select元素)
3.调用方法选取下拉列表元素
select_by_index(index):根据index属性定位选项,index从0开始
select_by_value(value):根据value属性定位
select_by_visible_text(text):根据选项文本值来定位
first_selected_option():选择第一个选项
scrapy