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
不是所有的成功都是坐享其成,联系作者v(13147256756)