首页 > 解决方案 > 基于scrapy的爬虫不提取内容

标签

问题描述

我有一个可以抓取新闻文章的自定义爬虫。然而,在大多数情况下,当添加新的 url 时,有时很难弄清楚使用什么 css 选择器来获取我想要的内容。下面是我正在处理的代码。

# -*- coding: utf-8 -*-
""" Script to crawl Article from shttps://mycbs4.com
"""
try:
    from crawler import BaseCrawler
except:
    from __init__ import BaseCrawler


class Cmycbs4Crawler(BaseCrawler):
    start_urls = [
        'https://mycbs4.com/search?find=cannabis',
        'https://mycbs4.com/search?find=marijuana',
        'https://mycbs4.com/search?find=cbd',
        'https://mycbs4.com/search?find=thc',
        'https://mycbs4.com/search?find=hemp'
    ]

    source_id = 'mycbs4'

    config_selectors = {
        # Css selector on articles page (the page list many articles)
        'POST_URLS': '.sd-main a::attr(href)',
        #'NEXT_PAGE_URL': '.pager-next > a::attr(href)', # default

        # Css selector on article's detail page (the page display full content of article)
        'ARTICLE_CONTENT': '#js-Story-Content-0 > p',
    }

if __name__ == "__main__":
    crawler = Cmycbs4Crawler()
    crawler.run()

爬虫应该爬取网址并将所有内容填充回数据库。它会刮除内容以外的所有内容。

我试过跟随选择器

'#js-Story-Content-0 > p', .StoryText_storyText__1uZ3 > p' #js-Story-Content-0 .StoryText_storyText__1uZ3 > p

它们都不会导致文章中的内容被刮掉。所以,我不确定我做错了什么。

下面是我要抓取的内容/p 标签的屏幕截图

在此处输入图像描述

任何帮助将不胜感激

标签: pythonhtmlmongodbweb-scrapingscrapy

解决方案


您的内容存在于 中<script data-prerender="facade" type="application/json">,这很棒,因为您不必在 HTML 中四处寻找来解析您想要的信息,您可以json.loads使用

顺便说一句,当你看到一个类名js-Story-Content-0并且你在页面源代码中找不到任何这些<blockquote>元素时,这是一个死的赠品;页面源不等于页面DOM,Scrapy 总是只看到页面源,而不是 DOM。


推荐阅读