python - 基于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 标签的屏幕截图
任何帮助将不胜感激
解决方案
您的内容存在于 中<script data-prerender="facade" type="application/json">
,这很棒,因为您不必在 HTML 中四处寻找来解析您想要的信息,您可以json.loads
使用
顺便说一句,当你看到一个类名js-Story-Content-0
并且你在页面源代码中找不到任何这些<blockquote>
元素时,这是一个死的赠品;页面源不等于页面DOM,Scrapy 总是只看到页面源,而不是 DOM。
推荐阅读
- java - 我的 Java 程序无法识别 /usr/local 和子文件夹
- sqlite - 托管在 heroku 上的后端 Flask 服务器重置 sqlite 数据库。?
- ios - 显示的 react-native 页面元素在 unity3d 中反转
- node.js - req.users undefined react express
- laravel - 即使我已经将其移除,仍然可以检测到 livewire 组件和刀片
- javascript - ReferenceError:从window.open()刷新应用程序后未定义cordova
- android - LiveData 数据更改后 UI 不会更新
- python - 无法在 MacOS 上使用 pip
- java - 将 ImageButtons 附加到 OnClickListener 的位图
- ios - 在 SwiftUI 中折叠顶部栏