1

我是使用 Scrapy 的新手,我对 Python 语言知之甚少。到目前为止,我已经安装了 Scrapy 并学习了一些教程。在那之后,我一直在尝试找到一种方法来搜索许多网站以获取相同的数据。我的目标是使用 Scrapy 找到指向“帖子”的链接和一些搜索条件的链接。例如,我想搜索站点 A、B 和 C。每个站点,我想看看他们是否有关于应用名称 X、Y 和 Z 的“帖子”。如果他们有任何“帖子”在X、Y、Z。我希望它能够获取该帖子的链接。如果它会更容易......它可以扫描每个帖子以获取我们的公司名称。它会搜索每个“帖子”的内容而不是 X、Y、Z,以查找 [示例公司名称]。我这样做的原因是,创建的 JSON 只包含指向“帖子”的链接

我在 Ubuntu 10.12 上,我已经能够抓取我们想要的网站,但我无法将 JSON 缩小到所需的信息。所以目前我们仍然需要通过数百个链接,这是我们想要通过这样做来避免的。我们获得如此多链接的原因是因为我找到的所有教程都是用于抓取特定的 HTML 标签。我希望它搜索标签以查看它是否包含我们的应用程序标题或包名称的任何部分。

像这样,它显示帖子信息,但现在我们必须从 json 中挑选出链接。节省时间,但仍然不是我们真正想要的。我认为部分原因是我没有正确引用或调用它。请给我任何你能提供的帮助。我花了几个小时试图弄清楚这一点。

posts = hxs.select("//div[@class='post']")
        items = []
        for post in posts:
            item = ScrapySampleItem()
            item["title"] = post.select("div[@class='bodytext']/h2/a/text()").extract()
            item["link"] = post.select("div[@class='bodytext']/h2/a/@href").extract()
            item["content"] = post.select("div[@class='bodytext']/p/text()").extract()
            items.append(item)
        for item in items:
            yield item

我想用它来减少我们的 Android 应用程序的盗版。如果我可以让它出去并搜索我们想要的盗版网站,然后我可以通过电子邮件向网站或托管公司发送我们想要删除的所有链接。根据版权法,他们必须遵守,但他们要求我们将他们链接到他们侵犯的每个“帖子”,这就是为什么应用程序开发人员通常不会搞砸这类事情的原因。他们有数百个应用程序,因此找到指向您的应用程序的链接需要花费大量时间。

感谢您提前提供的任何帮助。从长远来看,您将帮助许多应用程序开发人员!

格雷迪

4

1 回答 1

0

您的 XPath 选择器是绝对的。它们必须相对于前一个选择器(.

posts = hxs.select('//div[@class='post']')

for post in posts:
    item = ScrapySampleItem()
    item['title'] = post.select('.//div[@class="bodytext"]/h2/a/text()').extract()
    item['link'] = post.select('.//div[@class="bodytext"]/h2/a/@href').extract()
    item['content'] = post.select('.//div[@class="bodytext"]/p/text()').extract()

    yield item
于 2013-03-17T04:56:13.477 回答