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

最新文章

  1. ssh 使用
  2. 关于RequireJS与AngularJS的集成文档
  3. 使用office制作图章公章
  4. canvas判断边距,反弹和拖拽的综合实例
  5. decode 横竖转换 2
  6. javascript的执行顺序(转载)
  7. Linux下把Mysql和Apache加入到系统服务里
  8. 跟开涛老师学shiro -- 授权
  9. hdu 2335 Containers
  10. Tools for Presention
  11. Adb shell 常用命令
  12. C++中基类对象的引用
  13. 2017-3-2 C#基础 集合
  14. iOS开发之@Selector参数的传递
  15. CSS学习笔记!
  16. 查看eclipse ADT SDK JDK版本号
  17. python--socket粘包
  18. 痞子衡嵌入式:ARM Cortex-M内核MCU开发那些事 - 索引
  19. php-cgi占用太多cpu资源而导致服务器响应过慢
  20. C++或C#调用外部exe的分析

热门文章

  1. LeetCode_136. Single Number
  2. Jsoup-简单爬取知乎推荐页面(附:get_agent())
  3. Introduction - Unsupervised Learning
  4. 2019-11-8 Linux作业 李宗盛
  5. kali安装chrome
  6. 最新 珍岛java校招面经 (含整理过的面试题大全)
  7. jqGrid取消所有选中
  8. C#基础知识学习 linq 和拉姆表达式二
  9. 06 ServletConfig、ServletContext_作用域对象
  10. uboot 代码执行顺序