【问题标题】:How to return items from my CrawlSpider?如何从我的 CrawlSpider 退货?
【发布时间】:2015-05-17 15:11:58
【问题描述】:

我想从一个页面开始抓取并使用下一个 url 遍历到 100 个页面,这是我用以下代码编写的。我需要转到该爬网中的另一个链接并提取数据并存储在项目中。我可以轻松打印所有要导出的项目数据,但无法根据需要从函数返回。

class UserLoginCrawl(CrawlSpider):
name = "mylogin"
allowed_domains = ['www.example.com']
login_page = "www.example.com/user"

start_urls = ["www.example.com/profile?page=0"]
rules = [Rule(SgmlLinkExtractor(
    allow = ('/profile\?page=\d+'),
    restrict_xpaths = ('//li[@class="pager-next"]',),canonicalize=False ),
              callback = 'parse_page',
              follow=True),]
# ulists = []

def parse_page(self, response):
    self.log ('XYZ, Started Crawling %s' %response.url)
    items = response.xpath("//div[@id='profile']/div")
    for temp in items:
        userurl = 'www.example.com'+temp.xpath("./div[@class='name']/a/@href").extract()[0]
        yield Request(url=userurl,callback=self.parse_profile_page)
    self.log ('XYZ, Finished Crawling %s' %response.url)
    # return self.ulists

def parse_profile_page(self, response):
    usritem = PostUsers()
    self.log ('XYZ, Started Crawling user Profile %s' %response.url)
    usritem["userlink"] = response.url
    usritem["fullname"] = response.xpath("//h1[@id='page-title']/text()").extract()
    relative_url = response.xpath("//div[@id='nav-content']/ul/li[2]/a/@href").extract()[0]
    usritem["postlink"] = 'www.example.com'+relative_url
    usritem["history"] = response.xpath("//div[@id='user_user_full_group_profile_main']/dl/dd[1]/text()").extract()
    # self.ulists.append(usritem)
    print usritem
    # return usritem

【问题讨论】:

  • 我想用“scrapy crawl mylogin -t csv -o mylist.csv”导出csv表单中的四个字段

标签: python scrapy yield-return


【解决方案1】:

在解析方法的末尾使用yield usritem

Spider Examples的第二个例子

【讨论】:

  • 谢谢你的想法。但是我遵循了使用元标记 request = Request(userurl,callback=self.parse_profile_page) request.meta['usritem'] = usritem 和 profile_page 返回 usritem 的最佳方式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2020-09-15
  • 1970-01-01
相关资源
最近更新 更多