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
