1
我正在使用Scrapy BaseSpider從網站收集數據。刮刀從產品展示頁面開始,在「下一頁」鏈接上移動,並從每個頁面收集某些數據並將其存儲到CSV文件中。蜘蛛程序運行正常,但僅從第1頁,第2頁和最後一頁(第36頁)收集數據。經過幾個小時的修改代碼之後,我無法弄清楚原因。以下代碼顯示了我的蜘蛛。有什麼建議麼?Scrapy蜘蛛不收集所有頁面的數據
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.http.request import Request
from longs.items import LongsItem
from scrapy.utils.response import get_base_url
import urlparse
class LongsComSpider(BaseSpider):
name = "longs"
allowed_domains = ["longswines.com"]
start_urls = ["http://www.longswines.com/wines/?page=3&sortby=winery&item_type=wine"]
def parse(self, response):
hxs = HtmlXPathSelector(response)
sites = hxs.select("//div[@class='pagebox']/a[6]/@href")
for site in sites:
relative_next_page = site.extract()
next_page = [urlparse.urljoin(response.url, relative_next_page)]
if not not relative_next_page:
yield Request(next_page[0], self.parse)
products = hxs.select("//div[@class='productlistitem']")
items = []
for product in products:
item = LongsItem()
item["title"] = product.select("div[1]/h2/a/text()").extract()
item["link"] = response.url
item["price"] = product.select("div[2]/h2/text()").extract()
item["details"] = product.select("div[1]/p/text()").extract()
items.append(item)
for item in items:
yield item
您的代碼被打破,看到'站點在站點:'線。下面的行不縮進。如果你清理它會更容易幫助你。 –
我在不同的網站上使用此代碼,具有類似的設置,它的工作原理。它不適用於這個特定的網站,因爲一些反刮機制(facepalm)。這裏的教訓是在所有不同的場景下嘗試編碼。無論如何,希望代碼可以幫助某人。 – Anike