当前位置: 首页 > 知识库问答 >
问题:

刮擦不产生结果(已爬网0页)

濮阳繁
2023-03-14

试图找出scrapy的工作原理,并使用它在论坛上查找信息。

items.py

import scrapy


class BodybuildingItem(scrapy.Item):
    # define the fields for your item here like:
    title = scrapy.Field()
    pass

spider.py

from scrapy.spider import BaseSpider
from scrapy.selector import Selector
from bodybuilding.items import BodybuildingItem

class BodyBuildingSpider(BaseSpider):
    name = "bodybuilding"
    allowed_domains = ["forum.bodybuilding.nl"]
    start_urls = [
        "https://forum.bodybuilding.nl/fora/supplementen.22/"
    ]

    def parse(self, response):
        responseSelector = Selector(response)
        for sel in responseSelector.css('li.past.line.event-item'):
            item = BodybuildingItem()
            item['title'] = sel.css('a.data-previewUrl::text').extract()
            yield item

在这个例子中,我试图获取帖子标题的论坛是:https://forum.bodybuilding.nl/fora/supplementen.22/

然而,我一直没有得到任何结果:

类BodyBuildingSpider(BaseSpider):2017-10-07 00:42:28[scrapy.utils.log]信息:scrapy 1.4.0启动(机器人:健美)2017-10-07 00:42:28[scrapy.utils.log]信息:覆盖设置:{'NEWSPIDER_模块':'bodybuilding.SPIDER','SPIDER_模块':['bodybuilding.SPIDER','ROBOTSTXT_服从]:True,'bot_NAME':'bodybuilding']2017-10-07 00:42:28[scrapy.middleware]信息:启用的扩展:['scrapy.extensions.memusage.MemorySage','scrapy.extensions.logstats.logstats','scrapy.extensions.corestats.corestats']2017-10-07 00:42:28[scrapy.middleware]信息:启用的下载程序中间件:['scrapy.downloadermiddleware.robotstxt.RobotsTxtMiddleware','scrapy.downloadermiddleware.httpauth.HttpAuthMiddleware','scrapy.downloadermiddleware.downloaderTimeout.downloadermiddleware','scrapy.downloadermiddleware.DefaultHeadersMiddleware','scrapy.downloadermiddleware.useragent.UserAgentMiddleware','scrapy.downloader中间件.retry.RetryMiddleware',scrapy.DownloaderMiddleware.redirect.MetaRefreshMiddleware',scrapy.DownloaderMiddleware.httpcompression中间件',scrapy.DownloaderMiddleware.redirect.RedirectMiddleware',scrapy.DownloaderMiddleware.cookies中间件',scrapy.DownloaderMiddleware.HttpProxyMiddlewar电子“,”scrapy.downloadermiddleware.stats.DownloaderStats']2017-10-07 00:42:28[scrapy.middleware]信息:启用的蜘蛛中间件:['scrapy.SpiderMiddleware.httperror.HttpErrorMiddleware','scrapy.SpiderMiddleware.offsite.OffsiteMiddleware','scrapy.SpiderMiddleware.referer.RefererMiddleware','scrapy.SpiderMiddleware.urllength.UrlLengthMiddleware','scrapy.SpiderMiddleware.depth.DepthMiddleware']2017-10-07 00:42:28[scrapy.middleware]信息:启用的项目管道:[]2017-10-07 00:42:28[scrapy.core.engine]信息:蜘蛛打开2017-10-07 00:42:28[scrapy.extensions.logstats]信息:爬网0页(以0页/分钟),爬网0项(以0项/分钟)2017-10-07 00:42:28[scrapy.core.engine]调试:爬网(404)https://forum.bodybuilding.nl/robots.txt

我在这里一直遵循指南:http://blog.florian-hopf.de/2014/07/scrapy-and-elasticsearch.html

更新1:

正如有人告诉我的,我需要将代码更新到新标准,我做到了,但结果没有改变:

from scrapy.spider import BaseSpider
from scrapy.selector import Selector
from bodybuilding.items import BodybuildingItem

class BodyBuildingSpider(BaseSpider):
    name = "bodybuilding"
    allowed_domains = ["forum.bodybuilding.nl"]
    start_urls = [
        "https://forum.bodybuilding.nl/fora/supplementen.22/"
    ]

    def parse(self, response):
        for sel in response.css('li.past.line.event-item'):
            item = BodybuildingItem()
            yield {'title': title.css('a.data-previewUrl::text').extract_first()}
            yield item

最后一次更新修复

经过一些很好的帮助,我终于可以使用这个蜘蛛了:

import scrapy

class BlogSpider(scrapy.Spider):
    name = 'bodybuilding'
    start_urls = ['https://forum.bodybuilding.nl/fora/supplementen.22/']

    def parse(self, response):
        for title in response.css('h3.title'):
            yield {'title': title.css('a::text').extract_first()}
            next_page_url = response.xpath("//a[text()='Volgende >']/@href").extract_first()
            if next_page_url:
                 yield response.follow(next_page_url, callback=self.parse)

共有1个答案

厉念
2023-03-14

您应该使用response.css('li.pass.line.event item'),并且不需要responseSelector=Selector(response)

此外,您正在使用的CSSli.past.line.event项目,不再有效,因此您需要首先根据最新的网页更新这些内容

要获取下一页URL,可以使用

>>> response.css("a.text::attr(href)").extract_first()
'fora/supplementen.22/page-2'

然后使用response.follow跟随这个相对的url

编辑-2:下一页处理更正

上一次编辑不起作用,因为在下一页上它与上一页url匹配,所以您需要使用下面的

next_page_url = response.xpath("//a[text()='Volgende >']/@href").extract_first()
if next_page_url:
   yield response.follow(next_page_url, callback=self.parse)

Edit-1:下一页处理

next_page_url = response.css("a.text::attr(href)").extract_first()
if next_page_url:
   yield response.follow(next_page_url, callback=self.parse)
 类似资料:
  • 问题内容: 我的问题是:如何从网站抓取数据,但是直到单击例如“Danhsáchchậm”,该数据才显示。我已经非常认真地尝试,当您单击“Danhsáchchậm”时,这是onclick事件,该事件触发了一些javascript函数js函数之一是从服务器获取数据并将其插入标签/占位符,然后在此时,您可以使用firefox之类的方法检查数据,是的,数据将显示给网页上的用户/查看者。因此,我们又该如何以

  • 我试着在一个. asp网站上运行一个蜘蛛,它需要登录授权和一些爬行到同一个网站内的不同页面。我昨天成功地使用我的蜘蛛登录,并正在用不同的功能抓取数据,当我在更改了as功能后再次运行蜘蛛时,蜘蛛停止了工作。我不知道发生了什么,我对网络抓取相当陌生。下面是代码: 以下是日志: 代码曾经能够尝试从页面中抓取一些我想要的数据,但没有成功,但我相信这只是因为我使用了错误的css选择器。现在它只是打开和关闭而

  • 你好,我想使用python 3.x和BeautifulSoup从一个带有年龄验证弹出式窗口的网站上刮取数据。如果不点击“是”来表示“你是否超过21岁”,我就无法获得底层的文本和图像。谢谢你的支持。 编辑:谢谢,通过一些注释的帮助,我看到我可以使用cookie,但不确定如何管理/存储/调用请求包中的cookie。 编辑4:取得了一些进展,更新的代码如下。我设法在XML代码中找到了元素,现在我只需要设

  • 我试图从IMDB网站抓取特定电影评论的评论。为此,我使用抓取网络,我有内嵌循环,因为有74个页面。 附件是配置的图像。请帮忙。我深陷其中。 爬网网站的URL为:http://www.imdb.com/title/tt0454876/reviews?start=%{pagePos}

  • 问题内容: 我已经写了很多刮板,但是我不确定如何处理无限滚动条。如今,大多数网站,Facebook,Pinterest等都有无限滚动条。 问题答案: 您可以使用硒来刮除Twitter或Facebook之类的无限滚动网站。 步骤1:使用pip安装Selenium 第2步:使用下面的代码自动执行无限滚动并提取源代码 步骤3:根据需要打印数据。

  • 问题内容: 我取这个页面与该请求库中的Node.js,并使用解析身体cheerio。 调用已解析的响应正文,发现该页面的title属性为: …什么时候应该: 我尝试将请求库的选项设置为include ,但这似乎并没有改变任何东西。 如何保留这些字符? 问题答案: 该页面似乎是用iso-8859-1编码的。您需要通过传递并使用诸如node- iconv之 类的东西来告诉您退回未编码的缓冲区。 如果要