繁体   English   中英

带有身份验证的基本Scrapy Spider

[英]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。 如果后续页面与该规则不匹配,则根本不会对其进行解析。

有两种可能性:

  1. 在规则中设置follow == False,然后在parse_item函数中手动提取链接并创建Request对象。

  2. 优化allow参数和更多术语以匹配其他网址

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM