1

そのため、epinions.com から製品レビュー情報をスクレイピングしようとすると、メインのレビュー テキストが長すぎると、別のページへの「続きを読む」リンクが表示されます。「 http://www.epinions.com/reviews/samsung-galaxy-note-16-gb-cell-phone/pa_~1 」から例を挙げました。最初のレビューを見れば、私の言いたいことがわかるでしょう。 .

私は疑問に思っています: for ループの各反復で小さなスパイダーを使用して、URL を取得し、新しいリンクからレビューをこすり落とすことは可能ですか? 次のコードがありますが、小さな「スパイダー」では機能しません。

これが私のコードです:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from epinions_test.items import EpinionsTestItem
from scrapy.http import Response, HtmlResponse

class MySpider(BaseSpider):
    name = "epinions"
    allow_domains = ["epinions.com"]
    start_urls = ['http://www.epinions.com/reviews/samsung-galaxy-note-16-gb-cell-phone/pa_~1']

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        sites = hxs.select('//div[@class="review_info"]')

        items = []
        for sites in sites:
            item = EpinionsTestItem()
            item["title"] = sites.select('h2/a/text()').extract()
            item["star"] = sites.select('span/a/span/@title').extract()
            item["date"] = sites.select('span/span/span/@title').extract()
            item["review"] = sites.select('p/span/text()').extract()
# Everything works fine and i do have those four columns beautifully printed out, until....

            url2 = sites.select('p/span/a/@href').extract()
            url = str("http://www.epinions.com%s" %str(url2)[3:-2])
# This url is a string. when i print it out, it's like "http://www.epinions.com/review/samsung-galaxy-note-16-gb-cell-phone/content_624031731332", which looks legit.

            response2 = HtmlResponse(url)
# I tried in a scrapy shell, it shows that this is a htmlresponse...

            hxs2 = HtmlXPathSelector(response2)
            fullReview = hxs2.select('//div[@class = "user_review_full"]')
            item["url"] = fullReview.select('p/text()').extract()
# The three lines above works in an independent spider, where start_url is changed to the url just generated and everything.
# However, i got nothing from item["url"] in this code.

            items.append(item)
        return items

item["url"] が何も返さないのはなぜですか?

ありがとう!

4

1 に答える 1