爬虫练习——爬取笔趣阁

2024-03-08 12:30
文章标签 练习 爬虫 爬取 笔趣

本文主要是介绍爬虫练习——爬取笔趣阁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

爬取笔趣阁

    • 任务
    • ip 代理的设置
    • 完整代码
    • 效果
    • 总结

任务

在这里插入图片描述

  • 爬取上面这 4 本小说
  • 使用 requests 库
  • 不能漏掉 1 章
  • 在有限的时间内爬完
  • 以下面这个形式保存
    在这里插入图片描述

ip 代理的设置

免费 ip 代理网站:

  • https://seofangfa.com/proxy/
  • http://www.data5u.com/

代理测试网站:

  • http://httpbin.org/

测试代理是否可用

import requestsproxy = ['221.131.158.246:8888','183.245.8.185:80','218.7.171.91:3128','223.82.106.253:3128','58.250.21.56:3128','221.6.201.18:9999','27.220.51.34:9000','123.149.136.187:9999','125.108.127.160:9000','1.197.203.254:9999','42.7.30.35:9999','175.43.56.24:9999','125.123.154.223:3000','27.43.189.161:9999','123.169.121.100:9999']
for i in proxy:proxies = {'http':'http://'+i,'https':'https://'+i}print(proxies)try:response = requests.get("http://httpbin.org/",proxies=None)print(response.text)except requests.exceptions.ConnectionError as e:print('Error',e.args)

随机选取 1 个 ip

import requests
from random import choicedef get_proxy():proxy = ['221.131.158.246:8888','183.245.8.185:80','218.7.171.91:3128','223.82.106.253:3128','58.250.21.56:3128','221.6.201.18:9999','27.220.51.34:9000','123.149.136.187:9999','125.108.127.160:9000','1.197.203.254:9999','42.7.30.35:9999','175.43.56.24:9999','125.123.154.223:3000','27.43.189.161:9999','123.169.121.100:9999']return choice(proxy)proxy = get_proxy()proxies = {'http':'http://'+proxy,'https':'https://'+proxy}
print(proxies)
try:response = requests.get("http://httpbin.org/",proxies=None)print(response.text)
except requests.exceptions.ConnectionError as e:print('Error',e.args)

完整代码

import requests
import re
import os
import threading
from random import choicedef get_proxy():# 获得代理ipproxy = ['221.131.158.246:8888','218.7.171.91:3128','58.250.21.56:3128']return choice(proxy)def getHTMLText(url,timeout = 100):try:headers = {"user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36",}proxy = get_proxy()print(proxy)proxies = {'http':'http://'+proxy,'https':'https://'+proxy}r = requests.get(url,headers=headers,proxies=proxies)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return '错误'def write_file(file,content):# 小说标题和内容title_content = re.findall(r'<h1>(.*?)</h1>[\s\S]*?<div id="content">([\s\S]*?)<p>',content)for title,content in title_content:# 小说内容处理content = content.replace('&nbsp;',' ').replace('<br />','\n')#print(title,content)with open(file,'w',encoding='utf-8') as f:f.write('\t\t\t\t'+title+'\n\n\n\n')f.write(content)def download(book,title,href):'''book: 小说名称title: 章节标题href: 小说内容的url'''content = getHTMLText(href)write_file(book+"\\"+title+'.txt',content)def main():threads = []url = "http://www.xbiquge.la"html = getHTMLText(url)# 获取小说的名称和小说目录urlnovel_info = re.findall(r'<div class="item">[\s\S]*?<dt>.*?<a href="(.*?)">(.*?)</a>',html)for href,book in novel_info:print(href,book)# ---------------------------------------------------------- ##                    创建文件夹 名字为书名if os.path.exists(book):pass                                           else:os.mkdir(book) # ---------------------------------------------------------- #novel = getHTMLText(href)# 获取小说内容url和章节标题chapter_info = re.findall(r"<dd><a href='(.*?)' >(.*?)</a>",novel)# http://www.xbiquge.la/10/10489/4534454.htmlfor href,title in chapter_info:href = url + hrefprint(href,title)# ---------------------------------------------------------- ##                   多线程爬取T = threading.Thread(target=download,args=(book,title,href))T.setDaemon(False)  # 后台模式T.start()threads.append(T)# ---------------------------------------------------------- ##download(book,title,href)	# 不使用多线程爬取for T in threads:T.join()if __name__ == "__main__":main()

效果

在这里插入图片描述

总结

  • 免费 ip 代理不好用
  • 该程序的鲁棒性较差

解决方法

  1. 这次可不用 ip 代理,或用付费 ip 代理,构造自己的代理池
  2. 增加超时处理

这篇关于爬虫练习——爬取笔趣阁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误enum Number {Zero,One,Two,}enum Number1 {Zero = 0,One,Two,}// C语言风格的枚举定义enum Number2 {Zero = 0.0,One = 1.0,Two = 2.0,}fn m

MySql 事务练习

事务(transaction) -- 事务 transaction-- 事务是一组操作的集合,是一个不可分割的工作单位,事务会将所有的操作作为一个整体一起向系统提交或撤销请求-- 事务的操作要么同时成功,要么同时失败-- MySql的事务默认是自动提交的,当执行一个DML语句,MySql会立即自动隐式提交事务-- 常见案例:银行转账-- 逻辑:A给B转账1000:1.查询

html css jquery选项卡 代码练习小项目

在学习 html 和 css jquery 结合使用的时候 做好是能尝试做一些简单的小功能,来提高自己的 逻辑能力,熟悉代码的编写语法 下面分享一段代码 使用html css jquery选项卡 代码练习 <div class="box"><dl class="tab"><dd class="active">手机</dd><dd>家电</dd><dd>服装</dd><dd>数码</dd><dd

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

Golang 网络爬虫框架gocolly/colly(五)

gcocolly+goquery可以非常好地抓取HTML页面中的数据,但碰到页面是由Javascript动态生成时,用goquery就显得捉襟见肘了。解决方法有很多种: 一,最笨拙但有效的方法是字符串处理,go语言string底层对应字节数组,复制任何长度的字符串的开销都很低廉,搜索性能比较高; 二,利用正则表达式,要提取的数据往往有明显的特征,所以正则表达式写起来比较简单,不必非常严谨; 三,使

Golang网络爬虫框架gocolly/colly(四)

爬虫靠演技,表演得越像浏览器,抓取数据越容易,这是我多年爬虫经验的感悟。回顾下个人的爬虫经历,共分三个阶段:第一阶段,09年左右开始接触爬虫,那时由于项目需要,要访问各大国际社交网站,Facebook,myspace,filcker,youtube等等,国际上叫得上名字的社交网站都爬过,大部分网站提供restful api,有些功能没有api,就只能用http抓包工具分析协议,自己爬;国内的优酷、

Golang网络爬虫框架gocolly/colly(三)

熟悉了《Golang 网络爬虫框架gocolly/colly 一》和《Golang 网络爬虫框架gocolly/colly 二》之后就可以在网络上爬取大部分数据了。本文接下来将爬取中证指数有限公司提供的行业市盈率。(http://www.csindex.com.cn/zh-CN/downloads/industry-price-earnings-ratio) 定义数据结构体: type Zhj

014.Python爬虫系列_解析练习

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈 优