[英]Basic Scrapy Spider with Authentication
我是python的新手,scrapy以及不是shell脚本的所有东西。
就是说,我正在尝试编写一个从Etsy商店获取客户信息的刮板。
到目前为止,我已经写了:
from scrapy.spiders import BaseSpider, CrawlSpider, Rule
from scrapy.http import FormRequest
from loginform import fill_login_form
from scrapy.selector import HtmlXPathSelector
from scrapy.linkextractors.sgml import SgmlLinkExtractor
class LoginSpider(BaseSpider):
name = "etsy"
allowed_domains = ["etsy.com"]
start_urls = ["https://www.etsy.com/signin"]
login_user = "myuname"
login_pass = "mypass"
rules = (Rule(SgmlLinkExtractor(allow=("/your/orders/sold",))
, callback="parse_items", follow=True),
)
def parse(self, response):
args, url, method = fill_login_form(response.url,response.body,self.login_user, self.login_pass)
return FormRequest(url, method=method,formdata=args,callback=self.parse_item)
def after_login(self, response):
if "avorites" in response.body:
print 'logged in'
else:
print 'not logged in'
return
def parse_item(self, response):
#TBD
我遇到的问题是,我在parse_item中放入的任何内容都将在登录后简单地解析第一页,但是此后则不解析任何内容。
我敢肯定,我确实缺少一些基本知识,但其中没有一个例子能真正说明如何通过身份验证构造事物,然后在身份验证之后进行爬网。 我显然可以遵循这些教程,并且可以独立完成每个教程,但我不确定如何组织事物以便它们可以一起登录,然后浏览/ your / orders / sold下的所有页面。
即使有人可以指出一个可行的例子,这也将非常有用。
规则仅将具有确切路径'/ your / orders / sold'的网址分配给parse_item。 如果后续页面与该规则不匹配,则根本不会对其进行解析。
有两种可能性:
在规则中设置follow == False,然后在parse_item函数中手动提取链接并创建Request对象。
优化allow参数和更多术语以匹配其他网址
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.