登录后如何抓取页面

层数

我试图找到一种方法来登录区域中抓取并解析更多页面这些示例链接可从我想解析的登录帐户访问。

#http://example.com/seller/demand/?id=305554
#http://example.com/seller/demand/?id=305553
#http://example.com/seller/demand/?id=305552
#....

我想要创建可以打开这些链接中的每个链接然后对其进行解析的Spider。我创建了另一个蜘蛛,它只能打开和解析其中的一个

当我尝试创建“ for”或“ while”以使用其他链接调用更多请求时,由于我无法将更多的返回值生成到生成器中,因此它不允许我这样做,它返回错误。我也尝试了链接提取器,但是对我来说不起作用。

这是我的代码:

    #!c:/server/www/scrapy
    # -*- coding: utf-8 -*-
    from scrapy import Spider
    from scrapy.selector import Selector
    from scrapy.http import FormRequest
    from scrapy.http.request import Request
    from scrapy.spiders import CrawlSpider, Rule
    from array import *
    from stack.items import StackItem
    from scrapy.linkextractors import LinkExtractor

    class Spider3(Spider):
        name = "Spider3"
        allowed_domains = ["example.com"]
        start_urls = ["http://example.com/login"] #this link lead to login page

当我登录后,它返回带有url的页面,其中包含“ stat”,这就是为什么我在这里放置第一个“ if”条件的原因。登录后,我请求一个链接并调用函数parse_items。

        def parse(self, response):
                #when "stat" is in url it means that I just signed in
                if "stat" in response.url:              
                    return Request("http://example.com/seller/demand/?id=305554", callback = self.parse_items) 

            else:
                #this succesful login turns me to page, it's url contains "stat"
                return [FormRequest.from_response(response,
                        formdata={'ctl00$ContentPlaceHolder1$lMain$tbLogin': 'my_login', 'ctl00$ContentPlaceHolder1$lMain$tbPass': 'my_password'},callback=self.parse)]  

函数parse_items只是从一个所需的页面中解析所需的内容:

        def parse_items(self,response):
                questions = Selector(response).xpath('//*[@id="ctl00_ContentPlaceHolder1_cRequest_divAll"]/table/tr')
                for question in questions:
                    item = StackItem()
                    item['name'] = question.xpath('th/text()').extract()[0]
                    item['value'] = question.xpath('td/text()').extract()[0]
                    yield item  

您能帮我更新此代码以在每个会话中打开和解析多个页面吗?我不想为每个请求一遍又一遍地登录。

霸王龙

会话很可能取决于Cookie,scrapy会自行管理它。IE:

def parse_items(self,response):
    questions = Selector(response).xpath('//*[@id="ctl00_ContentPlaceHolder1_cRequest_divAll"]/table/tr')
    for question in questions:
        item = StackItem()
        item['name'] = question.xpath('th/text()').extract()[0]
        item['value'] = question.xpath('td/text()').extract()[0]
        yield item  
    next_url = '' # find url to next page in the current page
    if next_url:
        yield Request(next_url, self.parse_items)
        # scrapy will retain the session for the next page if it's managed by cookies

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

登录后从登录页面重定向FOSUserBundle

来自分类Dev

如何抓取此squawka页面?

来自分类Dev

完成AJAX请求后抓取页面

来自分类Dev

在laravel中登录后如何重定向特定页面

来自分类Dev

如何在登录后对页面进行爬网/索引?

来自分类Dev

用户登录后,如何防止浏览器返回登录表单页面?

来自分类Dev

登录硒后如何访问页面元素?

来自分类Dev

如何从aspx页面抓取图像?

来自分类Dev

认证后登录页面

来自分类Dev

成功登录后更改页面

来自分类Dev

在ReactJS中成功登录后如何重定向到页面?

来自分类Dev

如何抓取页面标题?

来自分类Dev

登录后从登录页面重定向FOSUserBundle

来自分类Dev

使用IdentityServices注销后如何重定向到“登录”页面

来自分类Dev

如何抓取此squawka页面?

来自分类Dev

抓取HTML源代码,如何在页面加载后的状态下抓取HTML?

来自分类Dev

完成AJAX请求后抓取页面

来自分类Dev

登录后如何重定向到其他页面

来自分类Dev

登录后自动关闭登录页面

来自分类Dev

Spring MVC:成功登录后,如何转发到特定页面?

来自分类Dev

成功登录GWT Java后如何打开新页面

来自分类Dev

登录硒后如何访问页面元素?

来自分类Dev

登录一次后如何从链接中抓取数据

来自分类Dev

登录后抓取

来自分类Dev

用户登录后如何删除android webview导航的登录页面?

来自分类Dev

验证成功后如何防止用户进入登录页面?

来自分类Dev

登录后如何重定向到自定义页面?

来自分类Dev

单击多个页面上的按钮后如何抓取数字?

来自分类Dev

使用 MechanicalSoup 登录成功后,网站在抓取时再次返回登录页面?

Related 相关文章

热门标签

归档