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 _其他库的简单操作与方法的更多相关文章

  1. TortoiseSVN搭建本地版本库及简单操作使用

    TortoiseSVN是windows上一款著名的版本控制软件,对于我们管理自己的代码,特别是对一个团队来说,非常重要. 本文探讨的是如何搭建本地的版本库. (1)安装TortoiseSVN之后需要创 ...

  2. TortoiseSVN 搭建本地版本库及简单操作使用

    TortoiseSVN是windows上一款著名的版本控制软件,对于我们管理自己的代码,特别是对一个团队来说,非常重要. 本文探讨的是如何搭建本地的版本库. (1)安装TortoiseSVN之后需要创 ...

  3. Python 数据分析中金融数据的来源库和简单操作

    目录 金融数据 pandas-datareader TuShare 金融学图表 案例 金融数据 数据分析离不开数据的获取,这里介绍几种常用的获取金融方面数据的方法. pandas-datareader ...

  4. python操作JIRA的库简单操作

    因公司需要,我们开发的PRISM又需要和JIRA对接啦, 今天找了一个JIRA库撸了一发~~~ jira库地址: https://pypi.python.org/pypi/jira/1.0.3 简单操 ...

  5. MongoDB数据库简单操作

    之前学过的有mysql数据库,现在我们学习一种非关系型数据库 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数 ...

  6. MongoDB的简单操作

    一.简介 二.MongoDB基础知识 三.安装 四.基本数据类型 五.增删改查操作 六.可视化工具 七.pymongo 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 MongoD ...

  7. C++标准库<string>简单总结

    C++标准库<string>简单总结 在C++中,如果需要对字符串进行处理,那么它自带的标准库<string>无疑是最好的选择,它实现了很多常用的字符处理函数. 要想使用标准C ...

  8. app 下载更新 file-downloader 文件下载库的简单介绍和使用

    app 下载更新 file-downloader 文件下载库的简单介绍和使用 今天介绍一个下载库:file-downloader 文件下载库 说明: * 本文内容来自原 file-downloader ...

  9. Linux下MySQL的简单操作

    Linux下MySQL的简单操作 更改mysql数据库root的密码 首次进入数据库是不用密码的: [root@localhost ~]# /usr/local/mysql/bin/mysql -ur ...

随机推荐

  1. PAT 甲级 1041 Be Unique (20 分)(简单,一遍过)

    1041 Be Unique (20 分)   Being unique is so important to people on Mars that even their lottery is de ...

  2. ABAP编辑器输入中文变成问号

    在ABAP编辑器里输入汉字,点击空格后显示问号? 中英文环境下编辑都出现乱码 实用程序->设置 ->基于文本的编辑器 如果用老式编辑器,可以输入中文  试试打个补丁 GUI740 补丁17 ...

  3. Jsoup-基础练习

    认识Jsoup 一个解析网页的工具 无论你用什么语言爬虫,都要解析网页,今天,我们用一款常用的网页解析Jsoup,来开启爬虫的第一课 认识网页,认识爬虫,认识你自己 *** 快速上手 了解一个新东西最 ...

  4. (七)Centos之链接命令

    一.链接命令:ln  (link) ln -s [源文件] [目标文件] 功能描述:生成链接文件 选项: -s 创建软链接 二.硬链接 硬链接特征: 1,拥有相同的i节点和存储block块,可以看作是 ...

  5. Spring Cloud(8):日志及分布式跟踪(Sleuth&Zipkin)

    简介 在微服务架构中,项目中前端发起一个请求,后端可能跨几个服务调用才能完成这个请求.如果系统越来越庞大,服务之间的调用与被调用关系就会变得很复杂,那么这时候我们需要分析具体哪一个服务出问题了就会显得 ...

  6. CentOS安装文件共享samba

    参考:https://jingyan.baidu.com/article/03b2f78cdf811c5ea237aebc.html https://www.linuxidc.com/Linux/20 ...

  7. 第六章 Realm及相关对象——《跟我学Shiro》

    转发地址:https://www.iteye.com/blog/jinnianshilongnian-2022468 目录贴:跟我学Shiro目录贴 6.1 Realm [2.5 Realm]及[3. ...

  8. json 格式化输出

    C#格式化JSON字符串 很多时候我们需要将json字符串以 {     "status": 1,     "sum": 9 }这种方式显示,而从服务端取回来的 ...

  9. B9 Concurrent 重入锁(ReentrantLock)

    [概述] java.util.concurrent.locks.ReentrantLock 实现 java.util.concurrent.locks.Lock 接口,加锁(lock)和 解锁(unl ...

  10. 了解 DML、DDL、DCL

    一.DML DML(Data Manipulation Language)数据操纵语言: 最经常用到的 SELECT.UPDATE.INSERT.DELETE. 主要用来对数据库的数据进行一些操作 S ...