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

PythonScrapy学习笔记

时间:2023-03-25 22:15:14 Python

title:PythonScrapyStudyNotessummary:MOOC.com学习Scrapy时做的笔记作者:小K日期时间:2021-08-1716:442021-08-2812:09tags:PythonScrapy笔记网络爬虫seleniumCSSselectorXPath[TOC]PythonScrapy学习笔记Scrapy爬虫编码创建项目总流程。该项目可以包含多个抓取不同网站的爬虫。访问网站,确定需要爬取的字段。以website.com为例。创建特定的爬虫。比如./spiders/website.py。爬虫模板有多种,具体请参考文档,这里以默认的为例。修改items.py。根据需要爬取的字段,定义对应的Item和ItemLoader。Item用于定义字段。ItemLoader用于清理提取的字段。修改网站.py。主要是WebsiteSpider类中的一些函数,如:defstart_requests(self):用于发起网络请求前的一些准备工作,如模拟登录、处理验证码、提取cookie等defparse(self,response,**kwargs):用于解析网络请求。返回新的网络请求或返回项目。如果是返回item,需要修改ItemLoader修改pipelines.py。item的处理管道在此处定义。管道用于数据存储。修改设置.py。或者修改custom_settings。推荐参考官方文档(常用如下)USER_AGENTROBOTSTXT_OBEY:遵守robots.txtDOWNLOAD_DELAY:下载延迟COOKIES_ENABLEDCOOKIES_DEBUGITEM_PIPELINES:管道开关其他常量修改middlewares.py。提高定制化程度。重写Scrapy的其他部分以增加自定义。如中间件(middleware):如将selenium集成到某个中间件等statscollection(数据收集机制):收集额外的数据信号(signalmechanism):使程序更灵活扩展(extension):本质上就是中间件和pipeline是由信号实现的扩展。覆盖扩展是最底层的修改之一。解析(数据提取)技术CSS选择器选择器解释。classname选择类名classname.class::attr(attrname)选择类名classname的标签中attrname的属性值。标签之间的内容#idname选择id为idname的标签XPath常用选择器解释//book选择文档中的所有book节点/book选择当前节点下的book节点*选择任意节点//em/text()所有em标签之间的文本包含谓词的选择器解释//title[@lang='eng']选择所有title节点,并具有lang属性,属性值为eng包含operator/的竖条的operatorselectorexplanation/book/titleverticalbar//book/price选择book元素的所有title和price元素(竖线不能打,因为不能转义)RegEx还没有加上SeleniumwithPython服务器识别selenium?在使用selenium之前,使用如下cmd启动chromecd"C:\ProgramFiles\Google\Chrome\Application"chrome.exe--remote-debugging-port=92以下python代码不能使用的原因是:这个命令需要返回值,除非多线程os.system('"C:\\ProgramFiles\\Google\\Chrome\\Application\\chrome.exe"--remote-debugging-port=9222')selenium确实在chromedriver的示例中不加载图像:fromseleniumimportwebdriverchrome_opt=webdriver.ChromeOptions()prefs={"profile.managed_default_content_settings.images":2}chrome_opt.add_experimental_option("prefs",prefs)browser=webdriver.Chrome(executable_path="chromedriver'saddress",chrome_options=chrome_opt)browser.get("你要抓取的url")其他浏览器操作方法参考SeleniumdisableImageloadingindifferentbrowserwillSelenium集成到Scrapy中,即重写下载器中间件、蜘蛛等进行集成,突破反爬方法。User-Agent转换的代码质量从高到低排序。有以下三种方法:UA表+随机UA 函数在settings.py中定义了一个ua_list;在需要执行 Request 的地方定义了random_ua(),通过按需调用UA表+重写UserAgentMiddleware在settings.py中定义了一个ua_list;同时在设置中修改.py中的SPIDER_MIDDLEWARES字段值修改middlewares.py。添加类MyUserAgentMiddleware,重写函数(需要查阅文档),如:__init__from_crawlerprocess_requestfake-useragent+rewriteUserAgentMiddlewarecallfake_useragentpackage同上重写UserAgentMiddlewareIP代理池,实现一个IP代理池的功能,其实和User类似-Agent改造,主要有两种方式。利用现有工具自己实现一个IP自动转换功能,例如:scrapy-proxies:随机转换IP的中间件scrapy-zyte-smartproxy:更智能的随机转换工具,自带IP资源,但收费:这个本质的上面是一个多次转发请求的浏览器,但是可以配置成IP转换工具。IP资源:您可以在Internet上找到免费和付费资源。cookie池是要加入到分布式爬虫请求队列中,url去重后放入某台主机的内存数据库redis中。小问答Scrapy与命令行scrapyshell[url|file]:交互式爬虫界面scrapystartproject[project_dir]:创建目录,保存项目scrapygenspider[options]:使用后creatingtheproject该命令在指定域名下创建爬虫scrapycrawlsomespider-sJOBDIR=crawls/somespider-1:启动爬虫,可以暂停(ctrl+c暂停)telnetlocalhost6023:用于远程连接到一个爬虫并远程查看爬虫信息。(默认链接地址和端口号可以在日志信息中找到)抓取、抓取和解析的区别抓取(爬取文档)本质上是跟随链接,包括内部和外部的链接。抓取(解析文档)是提取的行为,例如从爬行。解析(提取数据)基本上是将其分解成片段、组成部分或片段。作为动词,crawler可以用crawl来表示;作为名词,spider或者crawler可以用来表示动态网页获取技术selenium[+pyvirtualdisplay]PhantomJS:无界面浏览器scrapy-splashseleniumgridsplinterHTTP状态码分类分类描述1xx信息,服务端收到请求,请求者需要继续执行操作2xx成功,操作被成功接收并处理3xx重定向,需要进一步操作才能完成请求4xx客户端错误,请求包含语法错误或请求无法完成5xx服务器错误,服务器遇到errorwhileprocessingtherequest学习过程中使用的包或工具scrapy“引擎”从“爬虫”获取种子url。“引擎”将种子url推送到“调度程序”,并从“调度程序”请求一个url。“调度器”返回一个url给“引擎”。“引擎”将url发送给“下载器”,同时经过“下载器中间件”。“下载器”通过“下载器中间件”将下载的页面发送回“引擎”。“引擎”将下载的页面发送给“爬虫”,同时经过“爬虫中间件”。“爬虫”解析下载的页面(这部分是我们最常写的解析方式),将结果和新链接发送给“引擎”,通过“爬虫中间件”。“引擎”将结果发送到管道,将新链接发送到“调度程序”,并向“调度程序”请求一个url。重复上述过程,直到“调度器”中没有剩余的链接。————————————————版权声明:本文为CSDN博主“joker1993”原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本文转载声明。