我试图找到一种方法来刮和解析更多页面在登录区域。 这些示例链接可以从登录我可以解析。如何在登录后扫描页面
#http://example.com/seller/demand/?id=305554
#http://example.com/seller/demand/?id=305553
#http://example.com/seller/demand/?id=305552
#....
我想创建蜘蛛,可以打开这些链接中的每一个,然后解析它们。 我创建了另一只蜘蛛,它可以打开并解析,其中只有一个是。
当我试图创建“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页面,包含“统计”,这就是为什么我第一次把这里的“如果”条件。 当我登录时,我请求一个链接和调用函数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
你能帮助我,请更新此代码打开和分析比一页更在每个会话? 我不想一遍又一遍地登录每个请求。
您好,欢迎计算器!请花一点时间阅读本教程以获得更好的问题,尤其是关于优秀和劣势游戏的示例:stackoverflow.com/help/how-to-ask - 其他所有内容都很不错。 – Jurik
你需要在这里做的是找到下一页的网址,并在你的'parse_items'方法中形成一个请求。例如'yield Request(next_page,callback = self.parse_items)'。该会话很可能取决于Cookie和Scrapy本身的管理。除此之外,如果你没有提供你正在抓取的网址,我们无法真正帮助你。 – Granitosaurus
您确定您的登录成功吗? –