簡體   English   中英

Scrapy搜尋器無法從多個頁面搜尋數據

[英]Scrapy crawler not able to crawl data from multiple pages

我正在嘗試剪貼以下頁面的結果:

http://www.peekyou.com/work/autodesk/page=1

頁面= 1,2,3,4 ...依結果依此類推。 所以我正在獲取一個php文件來運行搜尋器,以針對不同的頁碼運行它。 代碼(用於單個頁面)如下:

`import sys
 from scrapy.spider import BaseSpider
 from scrapy.selector import HtmlXPathSelector
 from scrapy.contrib.spiders import CrawlSpider, Rule
 from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
 from scrapy.selector import HtmlXPathSelector
 from scrapy.item import Item
 from scrapy.http import Request
 #from scrapy.crawler import CrawlerProcess

 class DmozSpider(BaseSpider):
 name = "peekyou_crawler"

 start_urls = ["http://www.peekyou.com/work/autodesk/page=1"];

 def parse(self, response):

     hxs = HtmlXPathSelector(response)

     discovery = hxs.select('//div[@class="nextPage"]/table/tr[2]/td/a[contains(@title,"Next")]')
     print len(discovery)

     print "Starting the actual file"
     items = hxs.select('//div[@class="resultCell"]')
     count = 0
     for newsItem in items:
        print newsItem

        url=newsItem.select('h2/a/@href').extract()
        name = newsItem.select('h2/a/span/text()').extract()
        count = count + 1
        print count
        print url[0]
        print name[0]

        print "\n"

`Autodesk結果頁面有18頁。 當我運行代碼以爬網所有頁面時,爬網程序僅從頁面2而非所有頁面獲取數據。 同樣,我將公司名稱更改為其他名稱。 同樣,它會刮掉一些頁面,而不會休息。 我在每個頁面上都得到http響應200。 而且,即使我繼續運行它,它也會繼續始終(但並非總是)擦除相同的頁面。 是否知道我的方法可能有什么錯誤或缺少什么?

提前致謝。

您可以添加更多地址:

start_urls = [
    "http://www.peekyou.com/work/autodesk/page=1",
    "http://www.peekyou.com/work/autodesk/page=2",
    "http://www.peekyou.com/work/autodesk/page=3"
];

您可以生成更多地址:

start_urls = [
    "http://www.peekyou.com/work/autodesk/page=%d" % i for i in xrange(18)
];

我認為您應該閱讀有關start_requests()以及如何生成下一個URL的信息。 但是我不能在這里為您提供幫助,因為我不使用Scrapy。 我仍然使用純python(和pyQuery)創建簡單的搜尋器;)

PS。 有時服務器會檢查您的UserAgent,IP,您抓取下一頁的速度以及停止向您發送頁面的速度。

我給你一個起點。

您嘗試抓取的頁面是通過AJAX加載的,這是一個很麻煩的問題-它無法通過Ajax XHR請求處理動態頁面加載。 有關更多信息,請參見:

使用瀏覽器開發人員工具,您可能會注意到在頁面加載之后發生了傳出的POST請求。 它將轉到http://www.peekyou.com/work/autodesk/web_results/web_tag_search_checker.php

因此,在scrapy中進行模擬應該可以幫助您抓取必要的數據:

from scrapy.http import FormRequest
from scrapy.item import Item, Field
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector


class DmozItem(Item):
    name = Field()
    link = Field()


class DmozSpider(BaseSpider):
    name = "peekyou_crawler"

    start_urls = start_urls = [
        "http://www.peekyou.com/work/autodesk/page=%d" % i for i in xrange(18)
    ]

    def parse(self, response):
        yield FormRequest(url="http://www.peekyou.com/work/autodesk/web_results/web_tag_search_checker.php",
                          formdata={'id': 'search_work_a10362ede5ed8ed5ff1191321978f12a',
                                    '_': ''},
                          method="POST",
                          callback=self.after_post)

    def after_post(self, response):
        hxs = HtmlXPathSelector(response)

        persons = hxs.select("//div[@class='resultCell']")

        for person in persons:
            item = DmozItem()
            item['name'] = person.select('.//h2/a/span/text()').extract()[0].strip()
            item['link'] = person.select('.//h2/a/@href').extract()[0].strip()
            yield item

它可以工作,但是只轉儲第一頁。 我將其留給您了解如何獲得其他結果。

希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM