scrapy

爬虫之scrapy框架(二)

六月ゝ 毕业季﹏ 提交于 2020-02-29 17:32:07
目录 一、使用scrapy整站爬取网站信息 scrapy的真正起始爬取方法 使用scrapy整站爬取cnblogs网站信息大致思路 二、scrapy的请求传参 三、提升scrapy爬取数据的效率 四、scrapy的下载中间件 下载中间件使用代理池 scrapy settings详细介绍 五、selenium在scrapy中的使用流程 六、scrapy框架去重规则 七、scrapy-redis分布式爬虫 八、常见反扒措施 一、使用scrapy整站爬取网站信息 scrapy的真正起始爬取方法 当我们启动spider.py文件时,会执行我们设置好的 start_urls ,但是源码真正是如何处理的呢?我们进入scrapy.Spider查看源码,Spider类下有如下代码: def start_requests(self): cls = self.__class__#当前实例对象的类 if method_is_overridden(cls, Spider, 'make_requests_from_url'): warnings.warn( "Spider.make_requests_from_url method is deprecated; it " "won't be called in future Scrapy releases. Please " "override Spider

Python, extract XHR response data from website

谁都会走 提交于 2020-02-29 09:15:30
问题 I am trying to extract some data from https://www.barchart.com/stocks/signals/top-bottom/top?viewName=main. I am able to extract data from normal html using the xpath method, however i noticed that this website gets its data from a network. I have found the location of where the data I want is (the table from the barchart website) which is shown in the picture below. Picture of XHR response How can i scrape just the response portion? Thanks! 回答1: Try this code. from urllib import urlencode

Python---scrapy框架的学习

早过忘川 提交于 2020-02-29 08:41:42
scrapy框架的学习 先熟悉下scrapy项目结构: scrapyTest/scrapyTest/ _init_.py用来初始化项目信息 scrapyTest/scrapyTest/ items.py文件为爬虫项目的数据容器文件,主要用来定义我们的数据. scrapyTest/scrapyTest/ pipelines.py文件为爬虫项目的管道文件,主要用于对items中的数据进行进一步加工与处理 scrapyTest/scrapyTest/ settings.py文件为爬虫项目的设置文件,主要为爬虫项目设置一些信息。 spider文件夹下放置的是爬虫项目的爬虫部分相关的文件。 scrapyTest/scrapyTest/spider/ _init_.py文件为爬虫项目中部分代码进行初始化,主要是为spider进行初始化,以上是对scrapy项目的结构进行说明。 1. 创建scrapy项目: 比如我们需要在“D:\python\day1\”这个目录创建项目。 直接输入一下命令: cd D:\python\day1\ scrapy startproject <projectname> (这里我用scrapyTest来命名) 这里就创建scrapy项目成功 我们进入到创建项目的目录:cd 项目名称 在创建项目过程中我们也可以加一些参数进行控制: 输入命令: scrapy

用 scrapy 创建爬虫项目

大憨熊 提交于 2020-02-29 08:12:16
1 安装命令 pip install Scrapy 2 创建项目: scrapy startproject tutorial 项目结构: tutorial/ scrapy.cfg tutorial/ __init__.py items.py pipelines.py settings.py spiders/ __init__.py 3 定义Item:Item 是保存爬取到的数据的容器 import scrapy class DmozItem(scrapy.Item): title = scrapy.Field() link = scrapy.Field() desc = scrapy.Field() 4 Spider代码 import scrapy class DmozSpider(scrapy.Spider): name = "dmoz" allowed_domains = ["dmoz.org"] start_urls = [ "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/" ] def parse(self, response): filename

scrapy的useragent与代理ip

只愿长相守 提交于 2020-02-28 16:51:27
scrapy中的useragent与代理ip 方法一: user-agent我们可以直接在settings.py中更改,如下图,这样修改比较简单,但是并不推荐,更推荐的方法是修改使用scrapy的中间件middlewares.py 推荐方案: scrapy的中间件可以支持我们在对爬虫的请求进行定制化修改,例如我们为了躲避掉一些反爬虫措施,需要使用随机的useragent以及代理ip。 user-agent中间件的编写: 在middlewares.py文件中编写一个useragent中间件类 class UserAgentDownloadMiddlerware(object): # 所有的request请求在交给下载器之前,都会经过这个方法 def process_request(self,request,spider): import random user_agent_list=[ "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36", "Dalvik/1.6.0 (Linux; U; Android 4.2.1; 2013022 MIUI/JHACNBL30.0)", "Mozilla/5.0 (Linux;

爬虫Scrapy框架之css选择器使用

让人想犯罪 __ 提交于 2020-02-28 14:31:01
css选择器介绍 在css中选择器是一种模式,用于选择需要添加样式的元素,css对html页面中的元素实现一对一,一对多或者多对一的控制,都需要用到css选择器,html页面中的元素就是通过css选择器进行控制的; css选择器的基本语法 类选择器 :元素的class属性,比如 class="box" 表示选取class为box的元素; ID选择器 :元素的id属性,比如 id="box" 表示选取id为box的元素; 元素选择器 :直接选择文档元素,比如p表示选择所有的p元素,div表示选择所有的div元素; 属性选择器 :选择具有某个属性的元素,如 *[title] 表示选择所有包含 title 属性的元素、 a[href] 表示选择所有带有href属性的a元素等; 后代选择器 :选择包含元素后代的元素,如 li a 表示选取所有li 下所有a元素; 子元素选择器 :选择作为某元素子元素的元素,如 h1 > strong 表示选择父元素为h1 的所有 strong 元素; 相邻兄弟选择器 :选择紧接在另一元素后的元素,且二者有相同父元素,如h1 + p表示选择紧接在 h1 元素之后的所有p元素; scrapy 中的css使用方法 以a元素来举例说明 response.css('a') :返回的是selector对象; response.css('a').extract()

How to override join_multivalued option of CsvItemExporter

大兔子大兔子 提交于 2020-02-28 08:49:12
问题 CsvItemExporter has an option join_multivalued that defaults to a comma ( =',' ). How can i change this to another char in my scrapy project? 回答1: Set it in your custom CSVItemExporter this way: from scrapy.conf import settings from scrapy.contrib.exporter import CsvItemExporter class CSVkwItemExporter(CsvItemExporter): def __init__(self, *args, **kwargs): kwargs['fields_to_export'] = settings.getlist('EXPORT_FIELDS') or None kwargs['encoding'] = settings.get('EXPORT_ENCODING', 'utf-8') super

scrapy

岁酱吖の 提交于 2020-02-28 03:12:35
# 简介 ​ Scrapy一个开源和协作的框架,其最初是为了页面抓取所设计的,使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛,可用于如数 据挖掘、监测和自动化测试等领域,也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。 ​ Scrapy 是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架。因此Scrapy使用了一种非阻塞(又名异步)的代码来实现并发。整体架构大致如下 ![1036857-20171109221422778-1731419400](https://ws3.sinaimg.cn/large/006tNc79gy1fzhbu5vysxj312w0q4wge.jpg) 执行流程: 1.引擎从spider获取初始爬行请求。 2.引擎在调度程序中调度请求,并请求下一个要爬行的请求。 3.调度程序将下一个请求返回到引擎。 4.引擎将请求发送到下载器,并通过下载器中间件(请参见process_request())。 5.一旦页面完成下载,下载器将生成响应(使用该页面),并将其发送到引擎,并通过下载器中间软件(请参见process_response())。 6.引擎接收下载器的响应并将其发送给spider进行处理

scrapy爬虫框架使用命令运行出错

早过忘川 提交于 2020-02-27 23:49:52
在我学习莫烦Python的爬虫最后的scrapy框架时,在terminal中使用scrapy runspider try24.py -o res.json命令,输出: Fatal error in launcher: Unable to create process using ‘“d:\bld\scrapy_1572360424769_h_env\python.exe” “G:\Anaconda3\Scripts\scrapy.exe” runspider try24.py -o res.json’ 参考 使用python -m scrapy runspider try24.py -o res.json,加上python -m 表示以模块为脚本运行。 -m mod : run library module as a script (terminates option list) 意思是将库中的python模块用作脚本去运行 来源: CSDN 作者: 海平面远方开始阴霾 链接: https://blog.csdn.net/weixin_44416759/article/details/104544969

scrapy shell

断了今生、忘了曾经 提交于 2020-02-27 17:45:50
scrapy shell 说明 scrapy shell [url|file] Interactive console for scraping the given url or file. Use ./file.html syntax or full path for local file. 常用变量(对象和函数) request 最近一次下载对应的Request对象 response 最近一次下载对应的response对象 fetch(req-or-url) 该函数用于下载页面,可传入一个Request对象或url字符串,调用后会更新变量request和response view(response) 该函数用于在浏览器中显示response中的页面 来源: CSDN 作者: Z_sam 链接: https://blog.csdn.net/u010553139/article/details/104374336