为什么在Python中用'j'而不是'i'表示复数?

为什么在Python中用'j'而不是'i'表示复数?,第1张

为什么在Python中用'j'而不是'i'表示复数?

在上面的代码中,

FormRequest
用于进行身份验证的将该
after_login
函数设置为其回调。这意味着该
after_login
函数将被调用并传递登录尝试得到的页面作为响应。

然后,通过在页面中搜索特定的字符串(在本例中为)来检查您是否成功登录

"authentication failed"
。如果找到它,蜘蛛就会结束。

现在,一旦蜘蛛走了那么远,它就知道它已经成功通过了身份验证,您就可以开始产生新的请求和/或抓取数据了。因此,在这种情况下:

from scrapy.selector import HtmlXPathSelectorfrom scrapy.http import Request# ...def after_login(self, response):    # check login succeed before going on    if "authentication failed" in response.body:        self.log("Login failed", level=log.ERROR)        return    # We've successfully authenticated, let's have some fun!    else:        return Request(url="http://www.example.com/tastypage/",    callback=self.parse_tastypage)def parse_tastypage(self, response):    hxs = HtmlXPathSelector(response)    yum = hxs.select('//img')    # etc.

如果您
在此处查看

,则有一个蜘蛛示例,该示例会在刮刮之前进行身份验证。

在这种情况下,它将处理

parse
函数中的内容(任何请求的默认回调)。

def parse(self, response):    hxs = HtmlXPathSelector(response)    if hxs.select("//form[@id='UsernameLoginForm_LoginForm']"):        return self.login(response)    else:        return self.get_section_links(response)

因此,无论何时发出请求,都会检查响应中是否存在登录表单。如果存在,那么我们知道我们需要登录,所以我们调用相关的函数,如果不存在,则调用负责从响应中抓取数据的函数。

我希望这很清楚,请随时询问您还有其他问题!


编辑:

好的,所以您要做的不只是产生单个请求并将其抓取。您想点击链接。

为此,您需要做的就是从页面上抓取相关链接,并使用这些URL生成请求。例如:

def parse_page(self, response):    """ Scrape useful stuff from page, and spawn new requests    """    hxs = HtmlXPathSelector(response)    images = hxs.select('//img')    # .. do something with them    links = hxs.select('//a/@href')    # Yield a new request for each link we found    for link in links:        yield Request(url=link, callback=self.parse_page)

如您所见,它为页面上的每个URL生成了一个新请求,并且这些请求中的每一个都将使用其响应调用此相同的函数,因此我们正在进行一些递归的抓取。

我上面写的只是一个例子。如果要“抓取”页面,则应调查

CrawlSpider
而不是手动处理。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5505647.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存