h1 h2 章节标题 css html,第一个爬虫程序

2023-10-12 01:20

本文主要是介绍h1 h2 章节标题 css html,第一个爬虫程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近热播的电视剧 《全职高手》是由小说改编而成的,爬取小说当做练习吧~~本文练习爬取第一章的章节标题和章节内容,并且保存到本地文件中。

创建一个 scrapy 项目

$ scrapy init first_scrapy

创建完成后目录结构跟下面?应该是一样的,在 spiders 目录下新建 novel.py 文件,待会咱就在这个文件中写爬虫程序。

bVbvURw?w=193&h=287

写第一个爬虫

爬取网页源代码

import scrapy

class NovelSpider(scrapy.Spider):

# 启动爬虫时会用到这个名称

name = "novel"

# 爬取哪个网页的源码,这里是网址

start_urls = ["https://www.biquge5200.cc/0_857/651708.html"]

def parse(self, response):

# 拿到 html 网页源代码

html_str = response.css('html').extract_first()

# 保存为本地文件 source.html

with open('source.html', 'w') as f:

f.write(html_str)

self.log('保存文件成功')

name 爬虫的名字,启动爬虫时需要用到它;

start_urls 要爬取哪个网页的源代码,填写网页网址;

parse Scrapy 帮你请求网址,拿到源代码后塞给 response 参数,接下来对 response 操作提取需要的数据。

运行爬虫

$ scrapy crawl novel <= 这里的 novel 就是上面代码中的 name 值

执行完成后在根目录下创建了 source.html 文件,打开可以看到网页的源代码已经被我们爬下来了。

bVbvURK?w=869&h=425

提取数据

Scrapy 提供调试环境和 css 提取器,帮助我们快速准确的从 html 源代码中拿到我们需要的数据。

调试环境

Scrapy 提供了调试环境,方便我们测试提取的数据是否正确。

命令行中输入?脚本,其中 scrapy shell 是固定写法,后面跟要爬取网页的网址。

$ scrapy shell https://www.biquge5200.cc/0_857/651708.html

输入完成后会 blala... 打印一堆东东,我们只要关注最后一行 >>>。

2019-08-01 09:22:29 [scrapy.utils.log] INFO: Scrapy 1.5.1 started (bot: scrapybot)

2019-08-01 09:22:29 [scrapy.utils.log] INFO: Versions: lxml 4.2.5.0, libxml2 2.9.8, cssselect 1.0.3, parsel 1.5.0, w3lib 1.19.0, Twisted 18.7.0, Python 3.7.0 (default, Sep 18 2018, 18:47:22) - [Clang 9.1.0 (clang-902.0.39.2)], pyOpenSSL 18.0.0 (OpenSSL 1.1.0i 14 Aug 2018), cryptography 2.3.1, Platform Darwin-17.7.0-x86_64-i386-64bit

2019-08-01 09:22:29 [scrapy.crawler] INFO: Overridden settings: {'DUPEFILTER_CLASS': 'scrapy.dupefilters.BaseDupeFilter', 'LOGSTATS_INTERVAL': 0}

2019-08-01 09:22:29 [scrapy.middleware] INFO: Enabled extensions:

['scrapy.extensions.corestats.CoreStats',

'scrapy.extensions.telnet.TelnetConsole',

'scrapy.extensions.memusage.MemoryUsage']

2019-08-01 09:22:29 [scrapy.middleware] INFO: Enabled downloader middlewares:

['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',

'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',

'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',

'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',

'scrapy.downloadermiddlewares.retry.RetryMiddleware',

'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',

'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',

'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',

'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',

'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',

'scrapy.downloadermiddlewares.stats.DownloaderStats']

2019-08-01 09:22:29 [scrapy.middleware] INFO: Enabled spider middlewares:

['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',

'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',

'scrapy.spidermiddlewares.referer.RefererMiddleware',

'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',

'scrapy.spidermiddlewares.depth.DepthMiddleware']

2019-08-01 09:22:29 [scrapy.middleware] INFO: Enabled item pipelines:

[]

2019-08-01 09:22:29 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023

2019-08-01 09:22:29 [scrapy.core.engine] INFO: Spider opened

2019-08-01 09:22:29 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None)

[s] Available Scrapy objects:

[s] scrapy scrapy module (contains scrapy.Request, scrapy.Selector, etc)

[s] crawler

[s] item {}

[s] request

[s] response <200 https://www.biquge5200.cc/0_857/651708.html>

[s] settings

[s] spider

[s] Useful shortcuts:

[s] fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects are followed)

[s] fetch(req) Fetch a scrapy.Request and update local objects

[s] shelp() Shell help (print this help)

[s] view(response) View response in a browser

>>>

css 提取器

比如我们想提取 https://www.biquge5200.cc/0_857/651708.html 的 title 标签中的数据,在最后一行 >>> 后面输入 response.css('title'),然后回车。

>>> response.css('title')

[]

你会发现,提取到的是个 Selector 数组,并不是我们想要的数据。Scrapy 给我们准备了一些函数来进一步提取,extract() 函数将 Selector 转换为我们熟悉的 html 标签

>>> response.css('title').extract()

['

第一章 被驱逐的高手_全职高手_笔趣阁']

?拿到的 html 标签仍然是一个数组,在后面加上 [0] 很方便拿到数组中第一个元素

>>> response.css('title').extract()[0]

'

第一章 被驱逐的高手_全职高手_笔趣阁'

Scrapy 提供了另一个函数 extract_first(),同样可以拿到数组中第一个元素,写法上更加简单。至此,成功提取到 title 标签,但是多了 title 标签,继续修改。

>>> response.css('title').extract_first()

'

第一章 被驱逐的高手_全职高手_笔趣阁'

在 title 后面加上 ::text 即可提取 html 标签包裹的内容了。到这里已经成功提取到我们需要的数据了。

>>> response.css('title::text').extract_first()

'第一章 被驱逐的高手_全职高手_笔趣阁'

::text 可以提取 html 标签包裹的内容,如果要提取 html 标签自身的属性,比如上面? a 标签的 href 属性值,怎么办呢?

链接

::attr(属性名) 可以提取 html 标签自身的属性。

>>> response.css('a::attr(href)').extract_first()

提取章节标题和章节内容

有了前面 css 提取器的学习,拿到章节标题和章节内容相信不是什么困难的事了~~

import scrapy

class NovelSpider(scrapy.Spider):

name = "novel"

start_urls = ["https://www.biquge5200.cc/0_857/651708.html"]

def parse(self, response):

# 拿到章节标题

title = response.css('div.bookname h1::text').extract_first()

# 拿到章节内容

content = '\n\n'.join(response.css('div#content p::text').extract())

print("title ", title)

print("content ", content)

运行爬虫

$ scrapy crawl novel

可以看到分别打印了章节标题和标题内容。

保存为本地文件

在第一步 爬取网页 中已经用过一次保存为本地文件的操作了,当时是把网页源代码保存为 source.html。

现在把章节标题和章节内容保存为 novel.txt 文件。

import scrapy

class NovelSpider(scrapy.Spider):

name = "novel"

start_urls = ["https://www.biquge5200.cc/0_857/651708.html"]

def parse(self, response):

title = response.css('div.bookname h1::text').extract_first()

content = '\n\n'.join(response.css('div#content p::text').extract())

# 保存为本地文件 novel.txt

with open('novel.txt', 'w') as f:

f.write(title)

f.write('\n')

f.write(content)

self.log('保存文件成功')

运行爬虫,可以看到根目录下输出了 novel.txt 文件,成功地将章节标题和章节内容保存到文件中。

bVbvURL?w=634&h=386

这篇关于h1 h2 章节标题 css html,第一个爬虫程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/192211

相关文章

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动

HTML input 标签示例详解

《HTMLinput标签示例详解》input标签主要用于接收用户的输入,随type属性值的不同,变换其具体功能,本文通过实例图文并茂的形式给大家介绍HTMLinput标签,感兴趣的朋友一... 目录通用属性输入框单行文本输入框 text密码输入框 password数字输入框 number电子邮件输入编程框

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

HTML5 中的<button>标签用法和特征

《HTML5中的<button>标签用法和特征》在HTML5中,button标签用于定义一个可点击的按钮,它是创建交互式网页的重要元素之一,本文将深入解析HTML5中的button标签,详细介绍其属... 目录引言<button> 标签的基本用法<button> 标签的属性typevaluedisabled

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.