scrapy

scrapy 框架模拟登录_Request、Response

丶灬走出姿态 提交于 2019-12-20 01:21:36
1. Scrapy-Request和Response(请求和响应) Scrapy的Request和Response对象用于爬网网站。 通常,Request对象在爬虫程序中生成并传递到系统,直到它们到达下载程序,后者执行请求并返回一个Response对象,该对象返回到发出请求的爬虫程序。 爬虫RequestResponse创建获取下载数据数据爬虫RequestResponse 2. Request对象 class scrapy.http.Request(url[, callback, method='GET', headers, body, cookies, meta, encoding='utf-8', priority=0, dont_filter=False, errback]) 一个Request对象表示一个HTTP请求,它通常是在爬虫生成,并由下载执行,从而生成Response 参数 url(string) - 此请求的网址 callback(callable) - 将使用此请求的响应(一旦下载)作为其第一个参数调用的函数。有关更多信息,请参阅下面的将附加数据传递给回调函数。如果请求没有指定回调,parse()将使用spider的 方法。请注意,如果在处理期间引发异常,则会调用errback。 method(string) - 此请求的HTTP方法。默认为'GET'

Python爬虫从入门到放弃 之 Scrapy框架中Download Middleware用法

冷暖自知 提交于 2019-12-20 01:20:09
这篇文章中写了常用的下载中间件的用法和例子。 Downloader Middleware处理的过程主要在调度器发送requests请求的时候以及网页将response结果返回给spiders的时候,所以从这里我们可以知道下载中间件是介于Scrapy的request/response处理的钩子,用于修改Scrapy request和response。 编写自己的下载器中间件 编写下载器中间件,需要定义以下一个或者多个方法的python类 为了演示这里的中间件的使用方法,这里创建一个项目作为学习,这里的项目是关于爬去httpbin.org这个网站 scrapy startproject httpbintest cd httpbintest scrapy genspider example example.com 创建好后的目录结构如下: 这里我们先写一个简单的代理中间件来实现ip的伪装 创建好爬虫之后我们讲httpbin.py中的parse方法改成: def parse(self, response): print(response.text) 然后通过命令行启动爬虫:scrapy crawl httpbin 在最下面我们可以看到"origin": "114.250.88.66" 我们在查看自己的ip: 而我们要做就是通过代理中间件来实现ip的伪装,在middleares

Python爬虫从入门到放弃(十七)之 Scrapy框架中Download Middleware用法

依然范特西╮ 提交于 2019-12-20 01:19:24
原文地址https://www.cnblogs.com/zhaof/p/7198407.html 这篇文章中写了常用的下载中间件的用法和例子。 Downloader Middleware处理的过程主要在调度器发送requests请求的时候以及网页将response结果返回给spiders的时候,所以从这里我们可以知道下载中间件是介于Scrapy的request/response处理的钩子,用于修改Scrapy request和response。 编写自己的下载器中间件 编写下载器中间件,需要定义以下一个或者多个方法的python类 为了演示这里的中间件的使用方法,这里创建一个项目作为学习,这里的项目是关于爬去httpbin.org这个网站 scrapy startproject httpbintest cd httpbintest scrapy genspider example example.com 创建好后的目录结构如下: 这里我们先写一个简单的代理中间件来实现ip的伪装 创建好爬虫之后我们讲httpbin.py中的parse方法改成: def parse(self, response): print(response.text) 然后通过命令行启动爬虫:scrapy crawl httpbin 而我们要做就是通过代理中间件来实现ip的伪装,在middleares

爬虫--Scrapy之Downloader Middleware

人盡茶涼 提交于 2019-12-20 01:18:51
下载器中间件(Downloader Middleware) 下载器中间件是介于Scrapy的request/response处理的钩子框架。 是用于全局修改Scrapy request和response的一个轻量、底层的系统。 激活下载器中间件 要激活下载器中间件组件,将其加入到 DOWNLOADER_MIDDLEWARES 设置中。 该设置是一个字典(dict),键为中间件类的路径,值为其中间件的顺序(order)。 这里是一个例子: DOWNLOADER_MIDDLEWARES = { 'myproject.middlewares.CustomDownloaderMiddleware': 543, } DOWNLOADER_MIDDLEWARES 设置会与Scrapy定义的 DOWNLOADER_MIDDLEWARES_BASE 设置合并(但不是覆盖), 而后根据顺序(order)进行排序,最后得到启用中间件的有序列表: 第一个中间件是最靠近引擎的,最后一个中间件是最靠近下载器的。 关于如何分配中间件的顺序请查看 DOWNLOADER_MIDDLEWARES_BASE 设置,而后根据您想要放置中间件的位置选择一个值。 由于每个中间件执行不同的动作,您的中间件可能会依赖于之前(或者之后)执行的中间件,因此顺序是很重要的。 如果您想禁止内置的(在 DOWNLOADER

python爬虫scrapy框架——人工识别登录知乎倒立文字验证码和数字英文验证码(2)

本秂侑毒 提交于 2019-12-20 01:15:04
原创文章,转载请注明出处! 操作环境: python3 在上一文中 python爬虫scrapy框架——人工识别登录知乎倒立文字验证码和数字英文验证码(1) 我们已经介绍了用Requests库来登录知乎,本文如果看不懂可以先看之前的文章便于理解 本文将介绍如何用scrapy来登录知乎。 不多说,直接上代码: import scrapy import re import json class ZhihuSpider(scrapy.Spider): name = 'zhihu' allowed_domains = ['www.zhihu.com'] start_urls = ['https://www.zhihu.com/'] headers = { 'HOST': 'www.zhihu.com', 'Referer': 'https://www.zhihu.com', 'User-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8', } def parse(self, response): pass def parse_detail(self, response): # 爬取文章细节

利用scrapy模拟登录知乎

瘦欲@ 提交于 2019-12-20 01:14:02
闲来无事,写一个模拟登录知乎的小demo。 分析网页发现:登录需要的手机号,密码,_xsrf参数,验证码 实现思路: 1、获取验证码 2、获取_xsrf 参数 3、携带参数,请求登录 验证码url : "https://www.zhihu.com/captcha.gif?r={t}&type=login&lang=en".format(t=t) # t 为时间戳 登录界面url : "https://www.zhihu.com/#signin" 手机登录申请url : 'https://www.zhihu.com/login/phone_num' 实现代码:   首先配置文件 settings 中 ROBOTSTXT_OBEY = False   1、开头及验证码处理部分,先重写scrapy的start_requests方法。其次利用Pillow 来处理验证码,将验证码显示出来,手动填写(毕竟打码是需要费用的),知乎默认的验证码为中文,经分析发现验证码url 后面的 lang 参数决定语言,所以试着将语言改为英文(en) # -*- coding: utf-8 -*- import scrapy import time import json from PIL import Image class ZhihuSpider(scrapy.Spider): name = 'zhihu'

from scrapy.selector import selector error

拟墨画扇 提交于 2019-12-20 01:10:16
问题 I am unable to do the following: from scrapy.selector import Selector The error is: File "/Desktop/KSL/KSL/spiders/spider.py", line 1, in from scrapy.selector import Selector ImportError: cannot import name Selector It is as if LXML is not installed on my machine, but it is. Also, I thought this was a default module built into scrapy. Maybe not? Thoughts? 回答1: Try importing HtmlXPathSelector instead. from scrapy.selector import HtmlXPathSelector And then use the .select() method to parse out

Force Python Scrapy not to encode URL

百般思念 提交于 2019-12-19 18:23:22
问题 There are some URLs with [] in it like http://www.website.com/CN.html?value_ids[]=33&value_ids[]=5007 But when I try scraping this URL with Scrapy, it makes Request to this URL http://www.website.com/CN.html?value_ids%5B%5D=33&value_ids%5B%5D=5007 How can I force scrapy to not to urlenccode my URLs? 回答1: When creating a Request object scrapy applies some url encoding methods. To revert these you can utilize a custom middleware and change the url to your needs. You could use a Downloader

webmagic的设计机制及原理-如何开发一个Java爬虫

匆匆过客 提交于 2019-12-19 17:53:44
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 此文章是webmagic 0.1.0版的设计手册,后续版本的入门及用户手册请看这里: https://github.com/code4craft/webmagic/blob/master/user-manual.md 之前就有网友在博客里留言,觉得webmagic的实现比较有意思,想要借此研究一下爬虫。最近终于集中精力,花了三天时间,终于写完了这篇文章。之前垂直爬虫写了一年多,webmagic框架写了一个多月,这方面倒是有一些心得,希望对读者有帮助。 webmagic的目标 一般来说,一个爬虫包括几个部分: 页面下载 页面下载是一个爬虫的基础。下载页面之后才能进行其他后续操作。 链接提取 一般爬虫都会有一些初始的种子URL,但是这些URL对于爬虫是远远不够的。爬虫在爬页面的时候,需要不断发现新的链接。 URL管理 最基础的URL管理,就是对已经爬过的URL和没有爬的URL做区分,防止重复爬取。 内容分析和持久化 一般来说,我们最终需要的都不是原始的HTML页面。我们需要对爬到的页面进行分析,转化成结构化的数据,并存储下来。 不同的爬虫,对这几部分的要求是不一样的。 <!--more--> 对于通用型的爬虫,例如搜索引擎蜘蛛,需要指对互联网大部分网页无差别进行抓取。这时候难点就在于页面下载和链接管理上-

Cannot import either Scrapy's settings module or its scrapy.cfg

拈花ヽ惹草 提交于 2019-12-19 15:23:40
问题 This is a quite lengthy post, but after doing extensive research I couldn't find a solution. I have a mixed Django 1.4.1 / Scrapy 0.14.4 project on OSX 10.8 and I control Scrapy with the Django project's manage.py command as described here. For instance, calling python manage.py scrapy crawl example_spider works without a problem. Now I'm at the point where I want to setup the scrapyd web service to deploy my spiders. However, when I execute python manage.py scrapy server then I get this