spider _其他库的简单操作与方法
PHP : 网络IO
java : 代码笨重,代码量很大
C/C++ :虽然效率高,但是代码成型很慢 1 通用网络爬虫(搜索引擎引用,需要遵守robots协议)
1 搜索引擎如何获取一个新网站的 URL
1 网站主动向搜索提供(百度站长平台)
2 和dns服务商(万网)合作,快速收录新网站
2 聚焦网络爬虫
自己写的爬虫程序:面向需求的爬虫
3 爬取数据的步骤
1 确定要爬取的URL地址
2 通过HTTP/HTTPS协议获取相应的HTML页面
3 提取HTML页面中有用的数据
1 所需数据,保存
2 页面中有其他的URL,继续第2步 1 Spyder常用快捷键
1 注释/取消注释 crtl+1
2 运行f5
3 自动实例:Tab
====
9 爬虫请求模块
1 版本
1 python2 :urllib2 urllib
2 python3 :urllib.request
2 常用方法
1 urllib.request.urlopen()
1 作用:向网站发起请求,并获取响应
方法: read() #读取响应内容(字节流)
getcode() #响应码
geturl() #返回实际响应的url
2 响应对象res的方法
2 urllib.parse模块
urllib.parse.urlencode({字典})
编码前:{'wd':'中文'}
编码后:'wd=%ex%x'
3 urllib.parse.quote('字符串')
编码前:('中文')
编码后:'%ex%x'
4 urllib.parse.uquote('待解码字符串')
2 POST(在Request方法中添加data参数)
1 req = urllib.request.Request(url,data=data,headers = headers)
data : 表单数据以bytes类型提交,不能是string
2 如何把json格式的字符串转换为python
s = '{"key":"value"}'
s_dict = json.loads(s) 4 知识点
1 csv模块的使用流程
a = csv.writer(文件句柄)
a.writerow(列表元素)
5 requests 常用方法
1 get(url,headers = headers)
发起请求,并获取响应对象
res = get()
res.encoding 查看编码
如果编码问题,可以指定
res.encoding = 'utf-8'
res.text 查看响应内容
res.content 查看字节集
res.status_code 查看响应状态码
res.url 查看实际数据的url 使用场景
1 没有查询参数
res = requests.get(url,headers= headers)
2 有查询参数(params)
res = requests.get(url,params=params,headers=headers)
params:查询参数,字典不用编码,也不用拼接URL 1 代理IP(参数名:proxies)
requests.get(url=url,headers=headers,proxies={'http':'http://58.53.128.83:3128'})
1 普通代理
格式:proxies={'协议':"协议://ip地址:端口"}
2 私密代理
格式 proxies={'协议':"协议://用户名:密码@ip地址:端口号"}
2 响应对象res的属性
1 encoding:响应字符编码,res 3 post(url,data = data ,headers=headers)
data要求是字典
4 SSL证书认证(参数名:verify = True | False)
1 verify = True :默认,进行SSL证书认证
2 verify = False:不做认证
4 urllib.request中Handler处理器
1 定义
自定义的urlopen()方法,因为模块自带的urlopen不支持代理等功能,通过Handler处理器自定义urlopen方法
功能:通过Handler自理器自定义urlopen方法
2 常用方法
1 opener = build_opener(某种功能Handler处理器对象)
2 opener.open(url)
3 使用流程
1创建相关的Handler处理器对象
2 创建自定义opener对象
3 利用opener对象的open方法发请求获响应
4 Handler处理器分类
1 HTTPH遥():没有特殊功能
2 ProxyHandler({普通代理})
代理格式:{'':''}
3 ProxyBasicAuthHandler(密码管理器对象)
4 HTTPBasicAuthHandler(密码管理器对象)
5 密码管理器用途
1 私密代理
2 Web客户端认证
3 程序实现流程
1 创建密码管理对象
pwdmg = urllib.request.HTTPPasswordMgWithDefaultRealm()
2 把认证信息添加到对象里面去
pwdmg.add_password(None,Webserver, user,password)
3 创建Handler处理器对象
proxy_handler = urllib.request.BasicAuthHandler()
4 创建自定义opener过对象
opener = urllib.request.build_opener(proxy_handler)
5 利用opener对象的open方法发请求获响应
req = urllib.request.Request(url,headers=headers)
res = open.open(req)
=================
1 xpath 工具(解析)
1 Xpath
在XML文档中查找信息的语言,同样适用于HTML文档检索
2 Xpath辅助工具
1 Chrome插件: xpath Helper
打开/关闭 ,ctrl+shift+x
2 Firfox插件:Xpath checker
3 Xpath表达式编辑工具:XML Quire 3 选取节点
/:从根节点开始选取
//:从整个文档中查找节点
@ :选取某个节点的属性
| :异或
函数:contains()
匹配1个属性值
ex:
div[contains(@属性,包含属性值)]
2 LXML库及xpath使用
1 导入模块 :from lxml import etree
2 创建解析对象:parseHtml = etree.HTML(htmlResponser)
3 调用xpath
r_list = parseHtml.xpath('xpath语句')
4 如何获取节点对象的文本内容
节点对象名.text
3 selenium+phantomjs 强大的组合
1 特点
1 可以运行在浏览器,根据指定命令操作浏览器,让浏览器自动加载界面
2 只是工具,不支持浏览器功能,需要与第三方浏览器结合使用
3 安装
python -m pip install selenium
2 phantomjs
1 定义 : 无界面浏览器
2 特点 :
1 把网站加载到内存进行页面加载
2 运行高效
3 安装
1 windows (PhantomJS)
1 将下载的可执行文件放到python安装目录的Scripts目录下(都需要放到python/.../Scripts目录下)
2 windows(Chromedriver.exe)
https://chromedriver.storage.googleapis.com/index.html
下载和自己的浏览器相对应的版本
注意:Chromedriver设置无界面模式
1 opt = webdriver.ChromeOptions()
2 opt.set_headless()[此方法没有的话,请查看下面的代码进行更换]
opt.add_argument('windows-size=1900*3000') #设置分辨率
opt:对象中可添加各种功能
比如说:无界面,浏览器分辨率
opt.set_headless()
opt.add_argument('windows-size=1900*3000')
3 driver = webdriver.Chrome(options=opt)
4 driver.execute_script('windows.scrollTo(0,document.body.scrollHeight)') #拉到底部 4 命令
driver.page_source.find('字符串')
成功返回非 -1
失败返回 -1
3 单元素查找,类型为对象,利用对象名.text属性获取文本内容
4 对象名.send_keys('内容')
5 对象名.click()
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options() chrome_options.add_argument('--no-sandbox')#解决DevToolsActivePort文件不存在的报错 chrome_options.add_argument('window-size=1920x3000') #指定浏览器分辨率
chrome_options.add_argument('--disable-gpu') #谷歌文档提到需要加上这个属性来规避bug
chrome_options.add_argument('--hide-scrollbars') #隐藏滚动条, 应对一些特殊页面
chrome_options.add_argument('blink-settings=imagesEnabled=false') #不加载图片, 提升速度
chrome_options.add_argument('--headless') #浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
chrome_options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" #手动指定使用的浏览器位置
2 多线程爬虫
1 进程
1 系统中正在运行的一个应用程序
2 1个cpu核心1 次只能执行1 个进程,其他进程都属于非运行状态
3 N个CPU核心可同时执行N个任务
2 线程
1 进程中包含的执行单元,1个进程可包含多个线程
2 线程可使用所属进程空间(1次只能执行1个线程)
3 GIL:全局解释锁
执行通行证,仅此1个,谁拿到了通行证谁执行,否则等
4 应用场景
1 多进程:大量的密集计算
2 多线程:I/O操作密集
爬虫:网络I/O密集
写文件:本地磁盘I/O 3 put()
get()
Queue.empty():是否为空
Queue.join():如果队列为空,执行其他程序 1 Beautifulsoup解析
1 定义 :HTML或XML的解析器,依赖于lxml
2 安装 :python -m install beautifulsoup4
3 使用流程
1 导模块 :from bas import Beautifulsoup
2 创建解析对象
soup = BeautifulSoup(html,'lxml')
3 查找节点对象
soup.find_all('div',attrs={"class":"test"})
5 BeautifulSoup支持的解析库
1 lxml :soup = BeautifulSoup(html,'lxml')
速度快,文档容错能力强
2 html.parser :Python标准库
都一般
3 xml :
速度快,文档容错能力强
6 节点选择器
1 选择节点并获取内容
节点对象.节点名.string
7 find_all(): 返回列表
r_list = soup.find_all("节点名",attrs={"":""}) scrapy
1 定义:
异步处理框架,可配置和可扩展程度非常高,python上使用最广泛的爬虫框架
2 安装(Ubuntu)
1 安装依赖库
3
spider _其他库的简单操作与方法的更多相关文章
- TortoiseSVN搭建本地版本库及简单操作使用
TortoiseSVN是windows上一款著名的版本控制软件,对于我们管理自己的代码,特别是对一个团队来说,非常重要. 本文探讨的是如何搭建本地的版本库. (1)安装TortoiseSVN之后需要创 ...
- TortoiseSVN 搭建本地版本库及简单操作使用
TortoiseSVN是windows上一款著名的版本控制软件,对于我们管理自己的代码,特别是对一个团队来说,非常重要. 本文探讨的是如何搭建本地的版本库. (1)安装TortoiseSVN之后需要创 ...
- Python 数据分析中金融数据的来源库和简单操作
目录 金融数据 pandas-datareader TuShare 金融学图表 案例 金融数据 数据分析离不开数据的获取,这里介绍几种常用的获取金融方面数据的方法. pandas-datareader ...
- python操作JIRA的库简单操作
因公司需要,我们开发的PRISM又需要和JIRA对接啦, 今天找了一个JIRA库撸了一发~~~ jira库地址: https://pypi.python.org/pypi/jira/1.0.3 简单操 ...
- MongoDB数据库简单操作
之前学过的有mysql数据库,现在我们学习一种非关系型数据库 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数 ...
- MongoDB的简单操作
一.简介 二.MongoDB基础知识 三.安装 四.基本数据类型 五.增删改查操作 六.可视化工具 七.pymongo 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoD ...
- C++标准库<string>简单总结
C++标准库<string>简单总结 在C++中,如果需要对字符串进行处理,那么它自带的标准库<string>无疑是最好的选择,它实现了很多常用的字符处理函数. 要想使用标准C ...
- app 下载更新 file-downloader 文件下载库的简单介绍和使用
app 下载更新 file-downloader 文件下载库的简单介绍和使用 今天介绍一个下载库:file-downloader 文件下载库 说明: * 本文内容来自原 file-downloader ...
- Linux下MySQL的简单操作
Linux下MySQL的简单操作 更改mysql数据库root的密码 首次进入数据库是不用密码的: [root@localhost ~]# /usr/local/mysql/bin/mysql -ur ...
随机推荐
- Andrew Ng机器学习课程17(2)
Andrew Ng机器学习课程17(2) 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:主要介绍了利用value iteration和policy i ...
- 用BERT做语义相似度匹配任务:计算相似度的方式
1. 自然地使用[CLS] 2. cosine similairity 3. 长短文本的区别 4. sentence/word embedding 5. siamese network 方式 1. 自 ...
- Python: 对于DataFrame.loc传入列表和传入元组输出区别的理解
def test(): import pandas as pd tuples = [ ('cobra', 'mark i'), ('cobra', 'mark ii'), ('sidewinder', ...
- FAQ and discussed with adam
1. About permuter index. url: https://www.youtube.com/watch?v=j789k96g5aQ&list=PL0ZVw5-GryEkGAQ ...
- Linux安装expect
主要参考:https://www.cnblogs.com/zhenbianshu/p/5867440.html expect解释器 expect是一个能实现自动和交互式任务的解释器,它也能解释常见的s ...
- wordpress 图片上传时发生了错误,请稍后再试 的解决办法
前一天网站还是好好的,仅一天过后就显示图片无法上传,百思不得其解 上下百度,大多数帖子提供的解决办法对我都不适用,继续搜,最后发现一篇帖子中提到是wp-config的编码格式问题 想到昨天刚好修改了下 ...
- selenium cookie 登录
前言 爬虫方向的小伙伴们都知道网页爬虫经常遇到的问题就是登录账户,有些简单的网站我们可以简单的send key来输入账户密码就可以登录,但是有很多网站需要验证码之类的就不太好用了,这时候就体现到了co ...
- Python之正则表达式笔记
概述 概念 Regular Expression 一种文本模式,描述在搜索文本时要匹配的一个或多个字符串 典型场景 数据验证.文本扫描.文本提取.文本替换.文本分割 语法 字面值 普通字符 需转义:\ ...
- 使用HSE配置系统时钟并用MCO输出监测系统时钟
使用模板,在User下新建文件夹RCC 新建bsp_rccclkconfig.h和bsp_rccclkconfig.c 工程和魔术棒添加 对照着上节的RCC源文件编写: void HSE_SetSys ...
- c++学习---vector
vector存放类型不同,{}有些区别-: vector的size的返回类型: push_back的使用: 要防止缓冲区溢出,使用范围for语句: