当前位置: 首页 > 后端技术 > Python

python爬虫入门,8分钟就够了,这是我见过最简单的基础教学

时间:2023-03-25 21:37:22 Python

python爬虫入门,8分钟足够,这是我见过的最简单的基础教学,一个分析提取有用数据的程序。从技术角度来说,就是通过程序模拟浏览器请求站点的行为,将站点返回的HTML代码/JSON数据/二进制数据(图片、视频)抓取到本地,然后提取您需要的数据并将其存储以备使用。小编创建了一个2000人的python交流群。有零基础和工作的朋友可以交流,还有相关的电子书和视频下载。欢迎正在学习python的朋友和已经工作的朋友一起进来交流哦!群:8771698621.2爬虫基本流程用户获取网络数据的方式:方式一:浏览器提交请求--->下载网页代码--->解析成页面方式二:模拟浏览器发送请求请求(获取网页代码)->提取有用数据->存入数据库或文件爬虫需要做的是方法2,python爬虫入门,10分钟就够了,这可能是我最简单的基础教学了有没有看过执行JS和CSS代码2获取响应内容如果服务器能正常响应,你会得到一个ResponseResponse包含:html、json、图片、视频等3解析内容解析html数据:正则表达式(RE模块),xpath(主要用到),beautifulsoup,css解析json数据:json模块解析二进制数据:以wb格式写入文件4以数据库(MySQL、Mongdb、Redis)或文件形式保存数据。1.3http协议请求与响应http协议请求:用户将自己的信息通过浏览器(socketserver)发送给服务器(socketserver)响应:服务器接收到请求,解析用户发送的请求信息,然后返回data(返回的数据可能包含其他链接,如:图片、js、css等)ps:浏览器收到Response后,解析其内容显示给用户,爬虫模拟后提取内容浏览器发送一个请求,然后在Response中接收有用的数据。1.3.1request(1)请求方式常见的请求方式:GET/POST(2)请求的URLurl全局统一资源定位符用于定义互联网上唯一的资源。比如:一张图片,一个文件,一个视频都可以使用url来唯一确定(3)请求头User-agent:如果请求头中没有user-agent客户端配置,服务器可能会把你当成非法用户主机;cookies:cookies用于保存登录信息注:爬虫一般会添加请求头。请求头中需要注意的参数:Referrer:访问源从哪里来(一些大型网站会使用Referrer作为防盗链策略;所有爬虫也要注意模拟)User-Agent:浏览器访问(添加,否则视为爬虫程序)cookie:请注意携带请求头(4)请求体如果请求体在get方法中,则请求体没有内容(请求体get请求的of放在url后面的参数里,直接可以看到)如果是在post方法里,请求体是dataps格式的:1.登录窗口,文件上传等,信息会被追加totherequestbody2.登录,输入错误的用户名和密码,然后提交,就可以看到帖子了。正确登录后,页面通常会跳转,无法捕获post1.3.2response(1)响应状态码200:表示成功301:表示跳转404:文件不存在403:无权限访问502:服务器错误(2)responseheader需要注意的参数:Set-Cookie:BDSVRTM=0;path=/:可能不止一个,是告诉浏览器保存cookie(3)预览是网页源代码json数据比如网页html,图片二进制数据等022.基础模块2.1requestsrequests是python实现的简单易用的HTTP库,是urllib的升级版。开源地址:https://github.com/kennethrei...中文API:http://docs.python-requests.o...2.2re正则表达式使用Python中内置的re模块来使用正则表达式.缺点:数据处理不稳定,工作量大2.3XPathXpath(XMLPathLanguage)是一种在XML文档中查找信息的语言,可以用来遍历XML文档中的元素和属性。在python中,lxml库主要用于xpath的获取(框架中没有使用lxml,框架中直接使用xpath即可)。lxml是一个HTML/XML解析器,它的主要功能是如何解析和提取HTML/XML数据。与正则表达式一样,lxml也是用C语言实现的。它是一个高性能的PythonHTML/XML解析器。我们可以使用之前学过的XPath语法来快速定位到具体的元素和节点信息。2.4BeautifulSoup和lxml一样,BeautifulSoup也是一个HTML/XML解析器,主要功能是如何解析和提取HTML/XML数据。使用BeautifulSoup需要导入bs4库。缺点:比较正规,xpath处理速度慢。优点:使用简单2.5JsonJSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,可以方便人们的读写。同时也方便机器分析生成。适用于数据交互场景,如网站前后台数据交互。主要是利用python中的json模块来处理json数据。Json解析网址:https://www.sojson.com/simple...2.6threading使用threading模块创建线程,直接继承自threading.Thread,然后重写__init__方法和运行方法033.方法实例3.1get方法示例demo_get.py3.2Post方法示例demo_post.py3.3添加代理demo_proxies.py3.4获取ajax类数据示例demo_ajax.py3.5使用多线程示例demo_thread.py044.爬虫框架4.1Srcapy框架Scrapy使用purePython实现一个为爬取网站数据,提取结构化数据而编写的应用框架,用途广泛。Scrapy使用Twisted'tw?st?d异步网络框架来处理网络通信,可以加快我们的下载速度,而不需要自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。4.2Scrapy架构图4.3Scrapy主要组件ScrapyEngine(引擎):负责Spider、ItemPipeline、Downloader、Scheduler之间的通信、信号、数据传输。调度器(scheduler):负责接受引擎发来的Request,按照一定的方式排序,进入队列,在引擎需要的时候返回给引擎。Downloader(下载器):负责下载ScrapyEngine(引擎)发送的所有Request,并将获得的Response返回给ScrapyEngine(引擎),交给Spider由引擎处理。Spider(爬虫):负责处理AllResponse,从中分析提取数据,获取Item字段需要的数据,将需要跟进的URL提交给engine,然后进入Scheduler(调度器)),ItemPipeline(管道):负责处理在Spider中获取的item,并进行后期处理(详细分析、过滤、存储等)。DownloaderMiddlewares(下载中间件):你可以把它看成一个可以自定义扩展下载功能的组件。SpiderMiddlewares(蜘蛛中间件):可以理解为一个功能组件,可以自定义扩展和运行引擎以及引擎和Spider之间的中间通信(比如进入Spider的Response;以及从Spider出去的Requests)4.4Scrapy的运行流程引擎:Hi!蜘蛛,你在处理哪个网站?蜘蛛:老板要我处理xxxx.com。引擎:给我第一个需要处理的URL。Spider:给你,第一个URL是xxxxxxx.com。发动机:嗨!调度员,我有一个请求,请你帮我整理到队列中。调度员:好的,处理你等着。发动机:嗨!调度员,给我你处理过的请求。调度程序:给你,这是我处理过的请求引擎:嗨!下载器,请帮我按照老大的下载中间件设置,下载这个请求。下载器:好的!给你,这是下载的东西。(如果失败:抱歉,本次请求下载失败。然后引擎告诉调度器这个请求下载失败,请记录下来,我们稍后再下载)引擎:嗨!spider,这个是已经下载好的东西,按照老大的下载中间件处理的。你可以自己处理(注意!这里的响应默认由函数defparse()处理)引擎,我这里有两个结果,这是我需要跟进的URL,这是我拿到的Item数据。发动机:嗨!pipeline我这边有个东西,请帮我处理一下!调度程序!这是需要跟进的网址,你可以帮我处理一下。然后从第四步开始循环,直到得到boss需要的所有信息。管道``调度器:好的,现在就做!4.5制作一个Scrapy爬虫4步1新建一个爬虫项目scrapystartprojectmySpider2清空目标(写入items.py)打开mySpider目录下的items.py3制作一个爬虫(spiders/xxspider.py)scrapygenspidergushi365》gushi365.com》4存储内容(pipelines.py)设计管道存储爬取内容05五、常用工具5.1fidderfidder是一款抓包工具,主要用于手机抓包。5.2XPathHelperxpathhelper插件是一款免费的chrome爬虫网页分析工具。可以帮助用户解决获取xpath路径时无法正常定位等问题。谷歌浏览器插件xpathhelper的安装与使用:https://jingyan.baidu.com/art...06六、分布式爬虫6.1scrapy-redisScrapy-redis是为了更方便的实现Scrapy分布式爬虫,并提供了一些redis基于组件(pipinstallscrapy-redis)6.2分布式策略Master(核心服务器):搭建Redis数据库,不负责爬取,只负责url指纹权重判断,Request分发,数据存储。