私は掻き出して解析する方法を見つけようとしています。ページでログインしてください。 これらの例のリンクは、私が解析したい署名付きのものからアクセス可能です。ログイン後にページを削る方法
#http://example.com/seller/demand/?id=305554
#http://example.com/seller/demand/?id=305553
#http://example.com/seller/demand/?id=305552
#....
これらのリンクのそれぞれを開いて解析できるスパイダーを作成したいとします。 私はのいずれか1つだけを開いて解析できる別のクモを作成しました。
他のリンクでより多くのリクエストを呼び出すために「for」または「while」を作成しようとしたとき、を返すことができないためではなく、エラーに戻ります。私もリンク抽出を試みたが、それは私のためにはうまくいかなかった。
はここに私のコードです:条件「が」私が最初にここに入れて、なぜそれが「STAT」を含むURLのページを返すに
#!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
私が署名しています、それはです。 私がサインインしているとき、私はの1つのリンクを要求し、関数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のために歓迎!より良い質問や良いタイトル、悪いタイトルなどの例については、このチュートリアルを読んでください。stackoverflow.com/help/how-to-ask - 他のすべてのものはよく見えます。 – Jurik
あなたがここで行う必要があるのは、次のページのURLを見つけて、あなたの 'parse_items'メソッドで要求します。例えば'yield Request(next_page、callback = self.parse_items)'です。セッションは、おそらくクッキーに依存しており、その治療は単独でそれを管理しています。あなたが掻き集めているもののURLを提供していない場合は、それ以外には本当にお手伝いできません。 – Granitosaurus
ログインが成功しましたか? –