w3cschool上的来练练手,爬取笔趣看小说http://www.biqukan.com/

爬取《凡人修仙传仙界篇》的所有章节

1.利用requests访问目标网址,使用了get方法

2.使用BeautifulSoup解析返回的网页信息,使用了BeautifulSoup方法

3.从中获取我们需要的小说内容,使用了find,find_all等方法

4.进行格式化处理,主要是python里字典和列表的运算

5.保存到txt文件,涉及一些简单的文件操作,open,write等

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
import os class NovelSpider:
def __init__(self):
self.start_url = 'https://www.biqukan.com/1_1680/' def get_novel(self):
# 访问起始URL
response = requests.get(self.start_url)
# 这里用lxml解析器会出问题,找了好久才发现。。。
soup = BeautifulSoup(response.text, 'html.parser')
# print(response.text)
div_chapter = soup.find(class_="listmain")
# print(div_chapter)
     # 选取所有的a标签,a标签包含所有章节名称和URL
chapter_list = div_chapter.find_all('a')
# 这里去除前12个重复的章节(具体看html代码)
chapter_list = chapter_list[12:]
#print(chapter_list)
chapter = []
# 记录总章节数,下载显示完成率
chapter_num = len(chapter_list)
# 设置计数器
count = 0
# 循环对每个章节进行访问和下载
print('《凡人修仙传仙界篇》开始下载:')
for cl in chapter_list:
chapter_dict = {}
chapter_name = cl.get_text()
# 抓取章节名称
chapter_dict['name'] = chapter_name
chapter_url = cl.get('href')
# 抓取章节URL地址
chapter_dict['value'] = 'https://www.biqukan.com' + chapter_url
if chapter_dict not in chapter:
chapter.append(chapter_dict)
print(f"已下载:{count}/{chapter_num}")
# 调用download_novel(),按章节下载小说
self.download_novel(chapter_dict)
# 同时计数器加一
count += 1 def parse_novel(self, url):
# 小说章节的具体内容是动态加载的,用Phantom访问
browser = webdriver.PhantomJS(executable_path=r'F:\Spider\novelSpider\phantomjs.exe')
browser.get(url)
soup = BeautifulSoup(browser.page_source, 'html.parser')
find_txt = soup.find(class_='showtxt')
# print(type(find_txt.get_text()))
return find_txt.get_text() def download_novel(self, data): # data是{name:章节名,value:章节url地址}的字典
filename = data['name']
url = data['value']
# 通过url访问小说章节的具体内容,返回小说内容,str
txt = self.parse_novel(url) # 设置下载存储路径
path = r"F:\Spider\novelSpider"
# 检查路径是否存在,否则创建新的文件夹
isExists = os.path.exists(path)
if not isExists:
# print('创建了新的文件夹')
os.mkdir(path)
else:
# print('文件夹已存在')
pass # 保存txt文件
with open(path + f'\凡人修仙传仙界篇.txt', 'a', encoding='utf-8') as f:
# print(f'正在下载--{filename}')
f.write(f'{filename}\n\n')
f.write(txt)
# 章节分割线
f.write('\n======\n\n')
f.close() if __name__ == '__main__':
ns = NovelSpider()
ns.get_novel()

下载真的是超级慢,,,好像是PhantomJS访问花时间,,有待学习和改进!

爬虫入门实例:利用requests库爬取笔趣小说网的更多相关文章

  1. PYTHON 爬虫笔记八:利用Requests+正则表达式爬取猫眼电影top100(实战项目一)

    利用Requests+正则表达式爬取猫眼电影top100 目标站点分析 流程框架 爬虫实战 使用requests库获取top100首页: import requests def get_one_pag ...

  2. 爬虫系列4:Requests+Xpath 爬取动态数据

    爬虫系列4:Requests+Xpath 爬取动态数据 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参 ...

  3. Jsoup-基于Java实现网络爬虫-爬取笔趣阁小说

    注意!仅供学习交流使用,请勿用在歪门邪道的地方!技术只是工具!关键在于用途! 今天接触了一款有意思的框架,作用是网络爬虫,他可以像操作JS一样对网页内容进行提取 初体验Jsoup <!-- Ma ...

  4. Python爬取笔趣阁小说,有趣又实用

    上班想摸鱼?为了摸鱼方便,今天自己写了个爬取笔阁小说的程序.好吧,其实就是找个目的学习python,分享一下. 1. 首先导入相关的模块 import os import requests from ...

  5. bs4爬取笔趣阁小说

    参考链接:https://www.cnblogs.com/wt714/p/11963497.html 模块:requests,bs4,queue,sys,time 步骤:给出URL--> 访问U ...

  6. 【个人】爬虫实践,利用xpath方式爬取数据之爬取虾米音乐排行榜

    实验网站:虾米音乐排行榜 网站地址:http://www.xiami.com/chart  难度系数:★☆☆☆☆ 依赖库:request.lxml的etree (安装lxml:pip install ...

  7. 爬虫系列2:Requests+Xpath 爬取租房网站信息

    Requests+Xpath 爬取租房网站信息 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参考前文 ...

  8. 爬虫系列1:Requests+Xpath 爬取豆瓣电影TOP

    爬虫1:Requests+Xpath 爬取豆瓣电影TOP [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]: ...

  9. scrapy框架爬取笔趣阁

    笔趣阁是很好爬的网站了,这里简单爬取了全部小说链接和每本的全部章节链接,还想爬取章节内容在biquge.py里在加一个爬取循环,在pipelines.py添加保存函数即可 1 创建一个scrapy项目 ...

随机推荐

  1. Tomcat:At least one JAR was scanned for TLDs yet contained no TLDs

    启动Tomcat的时候,经常见到这样的BUG:   14-Apr-2019 13:53:25.198 信息 [localhost-startStop-1] org.apache.jasper.serv ...

  2. Java——构造方法和匿名对象

    前言 在编写程序时不安全的初始化会导致程序发生发生重大错误.为了使程序可以被安全地初始化,C++引入了构造器(也可以成为构造方法)的概念,这是一个在创建对象时被自动调用的特殊方法.Java中也采用了构 ...

  3. bash内置命令mapfile:读取文件内容到数组

    bash提供了两个内置命令:readarray和mapfile,它们是同义词.它们的作用是从标准输入读取一行行的数据,然后每一行都赋值给一个数组的各元素.显然,在shell编程中更常用的是从文件.从管 ...

  4. 简单说明CGI和动态请求是什么

    1. CGI是什么 CGI是common gateway interface的缩写,大家都译作通用网关接口,但很不幸,我们无法见名知意. 我们知道,web服务器所处理的内容都是静态的,要想处理动态内容 ...

  5. ASPxGridView中Command列自定义按钮点击事件概要

    其中CustomButtonClick="ButtonClick",e.buttonID可以获取到自定义按钮的id e.visibleIndex获取到行的索引 grdList.Ge ...

  6. JQuery官方学习资料(译):避免与其他库的冲突

    避免与其他库的冲突     JQuery库和它所有的插件都是包含在jQuery命名空间下的,作为一般规则,全局对象被存储在jQuery的命名空间内,所以你不会得到jQuery和任何其他库之间的冲突(例 ...

  7. 从零开始学安全(三)●黑客常用的windows端口

    端口可选1-65536 1-1024 预保留端口 留给windows系统服务的 下面是常见的端口对应的服务 1 TCP Port Service Multiplexer 传输控制协议端口服务多路开关选 ...

  8. Add Again(重复元素排序) UVA11076

    Add Again Summation of sequence of integers is always a common problem in Computer Science. Rather t ...

  9. Flask 系列之 FlaskForm

    通过使用 FlaskForm ,可以方便快捷的实现表单处理. 说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验 ...

  10. a dive in react lifecycle

    背景:我在react文档里找生命周期的图,居然没有,不敢相信我是在推特上找到的... 正文 react v16.3 新生命周期: static getDerivedStateFromProps get ...