《Python爬虫全书电子教案完整版ppt整套教学课件最全教学教程.pptx》由会员分享,可在线阅读,更多相关《Python爬虫全书电子教案完整版ppt整套教学课件最全教学教程.pptx(98页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Python与网络爬虫第1章Python与网络爬虫Add Text点击此处添加标题Python语言Python的安装与开发环境配置Python基本语法互联网, HTTP与HTML第一个爬虫程序调研网站目录Python与网络爬虫Python 3.0版本于2008年发布3.5和3.6也已逐步成为Python的主流版本Python的应用范围十分广泛豆瓣知乎系统编程、图形处理、科学计算、数据库、网络编程、Web应用、多媒体应用1. Python语言Python与网络爬虫访问python.org/download/ 并下载与计算机架构对应的 Python 3安装程序Ubuntu可以通过Applicati
2、ons中的添加应用程序进行安装2. Python的安装与开发环境配置Python与网络爬虫PyCharm:JetBrain公司出品的Python开发IDE(集成开发环境)支持Windows、Mac、Linux三大平台提供Professional和Community Edition两种版本选择2. Python的安装与开发环境配置Python与网络爬虫Jupyter面向编程过程,非常直观的代码和注释使用“pip install jupyter”命令来安装支持插入数学公式、制作演示文稿、特殊关键字等2. Python的安装与开发环境配置Python与网络爬虫Python 会根据每个变量的初始赋值情
3、况分析其类型注释通过“#”开头的字符串体现列表、元组、集合和字典列表切片逻辑语句for与while循环异常处理3. Python基本语法Python与网络爬虫函数和类def powanddivide(x,n=2,m=1): return x*n/mprint(powanddivide(3,2,5) # 1.8print(powanddivide(3,m=1,n=2) # 9.0class Player: name = def _init_(self,name): self.name = namepl1 = Player(PlayerX)print(pl1.name) # PlayerX3. P
4、ython基本语法Python与网络爬虫互联网HTTP(HyperText Transfer Protocol,超文本传输协议)HTML(Hyper Text Markup Language,超文本标记语言)HTTP请求GETPOST4. 互联网, HTTP与HTMLPython与网络爬虫1,访问站点;2,定位所需的信息;3,得到并处理信息requests与urllib对比robots协议5. 第一个爬虫程序Python与网络爬虫查看Sitemap使用wad u url命令使用whois命令浏览器的开发者工具6. 调研网站数据采集第2章数据采集Add Text点击此处添加标题从抓取开始正则表达
5、式BeautifulSoupXPath与lxml遍历页面使用API目录数据采集正则表达式:处理字符串XPath表达式BeautifulSoupCSS选择器lxml1. 从抓取开始数据采集Python的re库pile(string,flag) re.match(pattern, string, flags)re.search(pattern, string, flags)re.split(pattern, string, maxsplit)re.findall(pattern, string, flags)re.finditer(pattern, string, flags)re.sub(pat
6、tern, repl, string, count)re.subn(pattern, repl, string, count)2. 正则表达式import ress = I love you, do you?res = re.match(r(w)+(W)+,ss)print(res.group() 数据采集pip install bs4使用PyCharm IDE 安装指定parserbs1 = BeautifulSoup(ht.content,html.parser)bs1 = BeautifulSoup(ht.content,lxml)find()和find_all()方法3. Beauti
7、fulSoup数据采集XPath,XML Path Language(XML 路径语言)元素、属性、文本、命名空间、处理指令、注释以及文档,都是XML中的“节点”4. XPath与lxml表达式对应查询Node1选取Node1下的所有节点/node1斜杠代表到某元素的绝对路径,此处即选择根上的Node1/node1选取所有“node1”元素,不考虑XML中的位置node1/node2选取node1子节点中的所有node2node1/node2选取node1所有后辈节点中的所有node2.选取当前节点.选取当前的父节点/href选取XML中的所有href属性数据采集谓语与通配符4. XPath与
8、lxml/cinema/movie1选取cinema的 子元素中的第一个 movie元素/cinema/movielast()同上,但选取最后一个/cinema/movieposition()= dt_old浏览器模拟与网站测试4. 使用Selenium测试find_element(s)_by_*系列方法动作链(action chain)execute_script方法使用Selenium测试wikipedia浏览器模拟与网站测试4. 使用Selenium测试对于Wikipedia这个搜索关键字,搜索成功对于CANNOTSEARCH这个搜索关键字,查询失败更强大的爬虫第9章更强大的爬虫Add
9、Text点击此处添加标题爬虫框架网站反爬虫多进程与分布式目录更强大的爬虫1. 爬虫框架Scrapy更强大的爬虫1. 爬虫框架pip install scrapy创建Scrapy项目ItemPipeline更强大的爬虫1. 爬虫框架定制爬虫程序配置爬虫settings.pyBOT_NAME: Scrapy项目的bot名称,使用startproject命令创建项目时会自动赋值。ITEM_PIPELINES: 保存项目中启用的pipeline及其对应顺序,使用一个字典结构。字典默认为空,值(value)一般设定在0-1000范围内。数字小代表优先级高。LOG_ENABLED: 是否启用logging
10、,默认为TrueLOG_LEVEL: 设定log的最低级别USER_AGENT: 默认的用户代理# -*- coding: utf-8 -*-import scrapyfrom scrapy.selector import Selectorfrom .items import TextItemclass DoubanspiderSpider(scrapy.Spider): name = DoubanSpider allowed_domains = start_urls = https:/ def parse(self, response): item = TextItem() h1text =
11、 response.xpath(/a/text().extract() print(Text is+.join(h1text) itemtext = h1text return item更强大的爬虫1. 爬虫框架其他框架PySpiderPortiaWebMagic(Java)更强大的爬虫2. 网站反爬虫反爬虫策略1.识别request headers信息2.使用AJAX和动态加载3.验证码4.更改服务器返回的信息5.限制或封禁IP6.修改网页或URL内容7.账号限制更强大的爬虫2. 网站反爬虫伪装headers信息Accept指定客户端能够接收的内容类型Accept-Encoding浏览器可以
12、支持的web服务器返回内容压缩编码类型Accept-Language浏览器可接受的语言AuthorizationHTTP授权的授权证书Cache-Control指定请求和响应遵循的缓存机制Connection是否需要持久连接CookieCookie信息Date请求发送的日期和时间Expect请求的特定的服务器行为Host指定请求的服务器主机的域名和端口号等If-Unmodified-Since 只在实体在指定时间之后未被修改才请求成功Max-Forwards限制信息通过代理和网关传送的时间Pragma用来包含实现特定的指令Range只请求实体的一部分,指定范围Referer先前网页的地址Use
13、r-AgentUser-Agent的内容包含发出请求的用户信息,主要是浏览器信息Via通知中间网关或代理服务器地址,通信协议更强大的爬虫2. 网站反爬虫使用代理代理池更强大的爬虫2. 网站反爬虫控制访问频率降低访问频率模拟人类的访问规律更强大的爬虫3. 多进程与分布式多进程编程维护抓取任务的队列使用aiohttp分布式爬虫系统import aiohttpimport asyncio# 使用aiohttp访问网页的例子async def fetch(session, url): # 类似 requests.get async with session.get(url) as response: return await response.text()# 通过async实现单线程并发IOasync def main(): # 类似requests中的Session对象 async with aiohttp.ClientSession() as session: html = await fetch(session, http:/httpbin.org/headers) print(html)loop = asyncio.get_event_loop()loop.run_until_complete(main()
限制150内