私はScrapyを学んでいます。今、私はちょうど項目をscrapyしようと、私はクモを呼び出すとき:シェルでの治療は動作しますが、スパイダーは空のCSVを返します
planefinder]# scrapy crawl planefinder -o /User/spider/planefinder/pf.csv -t csv
それは技術情報を示していないし、何がコンテンツをかき取り(クロール0ページ....など)、そしてそれは、空のCSVファイルを返します。私はそれが動作scrapyシェルでXPathをテストするとき 問題がある:
>>> from scrapy.selector import Selector
>>> sel = Selector(response)
>>> flights = sel.xpath("//div[@class='col-md-12'][1]/div/div/table//tr")
>>> items = []
>>> for flt in flights:
... item = flt.xpath("td[1]/a/@href").extract_first()
... items.append(item)
...
>>> items
され、次の私のplaneFinder.pyコード:
# -*-:coding:utf-8 -*-
from scrapy.spiders import CrawlSpider
from scrapy.selector import Selector, HtmlXPathSelector
from planefinder.items import arr_flt_Item, dep_flt_Item
class planefinder(CrawlSpider):
name = 'planefinder'
host = 'https://planefinder.net'
start_url = ['https://planefinder.net/data/airport/PEK/']
def parse(self, response):
arr_flights = response.xpath("//div[@class='col-md-12'][1]/div/div/table//tr")
dep_flights = response.xpath("//div[@class='col-md-12'][2]/div/div/table//tr")
for flight in arr_flights:
arr_item = arr_flt_Item()
arr_flt_url = flight.xpath('td[1]/a/@href').extract_first()
arr_item['arr_flt_No'] = flight.xpath('td[1]/a/text()').extract_first()
arr_item['STA'] = flight.xpath('td[2]/text()').extract_first()
arr_item['From'] = flight.xpath('td[3]/a/text()').extract_first()
arr_item['ETA'] = flight.xpath('td[4]/text()').extract_first()
yield arr_item
はあなたに@Wilfredoをありがとう、それが機能するようになりました新しいScrapyの学習者として、私は、ページのニーズかどうかを知る方法を知りたいですいくつかのクッキーが設定されているか、何らかの基本的なanti-bot protectionを使用している可能性があります。 –
hey @ Kai.Wブラウザの開発者ツールを使用して、ソース/リクエストトラフィックなどを調べることができます。プロキシのようなサービスで、ウェブページごとに受信/送信されたものを正確に見ることができます(ブラウザでの処理、curl、urllibなどの動作がHTML本体を調べている場合)。 – Wilfredo