学习自学的能力-初学Python爬虫-爬取网站小说经历

本文讲述了作者学习编程的初衷和经历,通过阅读《自学是一门手艺》受到启发,决定专注于提升自学能力,并以Python爬虫作为起点。在实践中,作者遇到网络连接和反爬虫等问题,记录了首次尝试爬取小说的步骤,展现了自学过程中的挑战与乐趣,鼓励大家勇于尝试,共同进步。
摘要由CSDN通过智能技术生成

一开始学习编程,是高考落榜后,阴差阳错的选择了一个技术学院去学的。学的是Java,但那个时候就是填鸭式学习,为了就业学习编程,为了编程而编程,学了一年半载,连入门都没有。对,就是不知道编程是为了什么,编程和这个世界的关系是什么,它对我们的思维能力有什么帮助等等。都没有思考过,确实有点小小可惜,不过也算是结了个缘分。
如今,重新拾起,一方面是想拥有一门技能,以后不至于饿死,另一个呢,是看了李笑来的《自学是一门手艺》(Github上有开源),还没看完,但是让我坚定好好学习一门手艺叫做“自学能力”,而入门推荐的就是“编程”,通过阅读自学编程的同时实现自学能力的增长,一举两得,以后想要学什么,都能够有信心,因为当你有过成功的经历和能力已经提升的时候,再学习其他技能就游刃有余了。
在这个时代,不会编程的人和过去不会英语,不会操作电脑的人一样,已经开始落后了,慢慢可能会变成新时代的“文盲”。而不懂得自学的人更惨,只要别人不教你,你就永远落后别人,失去竞争力。希望我们都可以与时俱进。共勉。
接下来记录下第一次爬取小说的经历。通过《Python爬虫开发-从入门到实战》微课版本——作者谢乾坤学习。2020年疫情期间学习了一点基础,但因为不专注始终没有入门,现在决定先专注一个技能。
根据案例自己再修改了网络连接和正则表达式,准备爬取一个网站的一本小说。
步骤:
1、 使用requests 获取网页源代码
2、 使用正则表达式获取内容
3、 文件操作
代码如下:

import requests
import re
import os
import time

# 这个方法返回每个章节的链接
def get_chapter_url():
    html = requests.get('https://www.37zw.net/7/7579/').content.decode('GBK')
    # 先抓大再抓小
    chapter_html = re.search('正文(.*?)</dl>', html, re.S).group(0)
    chapter_url_list = []
    start_url = 'https://www.37zw.net/7/7579/'
    chapter_url = re.findall('href="(.*?)"',chapter_html,re.S)
    for url in chapter_url:
        chapter_url_list.append(start_url+url)
    return chapter_url_list

 # print(get_chapter_url(html))
 #获取每个链接的页面的源代码,再用正则表达式获取内容
#方法,获取文章章节标题和小说文章内容
def get_article(html_content):
   chapter_name = re.search('<h1>(.*?)</h1>', html_content,re.S).group(1)
   text_block = re.search('"content">(.*?)net',html_content,re.S).group(1)
   text_block = text_block.replace('<br />','').replace('&nbsp;','\n')
   return chapter_name,text_block

# 调用get_article这个方法



def save(chapter,article):
    dir_path = 'F:\小说:元龙'
    os.makedirs(dir_path,exist_ok = True)
    file_path = os.path.join(dir_path, chapter + '.txt')
    with open(file_path,'w',encoding='GBK') as f:
        f.write(article)


#获取每一章的源代码

chapter_url_list = get_chapter_url()
print(chapter_url_list)
#把每一章的源代码分别变成章节名字和正文内容
#一开始老是把链接直接传递给了get_article,而不是把内容获取好了再传递。所以报错。
for url in chapter_url_list:

    html_content = requests.get(url,timeout=2000).content.decode('GBK')
    chapter_name,article = get_article(html_content)
    save(chapter_name,article)
    time.sleep(200)

#requests.exceptions.ConnectionError: ('Connection aborted.', TimeoutError(10060,
# '由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。', None, 10060, None))
#解决方法:使用requests.get() 方法里面的timeout参数,让连接时间久一点。
#远程主机强迫关闭了一个现有的连接.应该是被服务器认为是爬虫,然后反爬虫了。

这是后面爬取的结果。一开始爬取一会就不懂了,直接连接断开。找方法使用requests.get()的时间参数timeout设置。顺利爬取了上百章,然后又出问题了,就是被网站认为是在攻击,启动反爬虫了。这个呢,我暂时解决不了,菜鸟嘛,今天先记录下这个情况,后面会记录如何解决这个问题的。嘻嘻第一次写技术博客。
《自学是一门手艺》笑来老师说,知识本身是枯燥的,所以我们要自己学会让它变得有趣,在这里记录也是一种学习方式。同时允许一开始自己的笨拙,就像小孩子学走路一样,然后使用最少必要知识马上开始用,不要等到什么都学了再用,那样永远不会开始了。
我相信我会学会自学能力,同时学会编程的。加油,共勉!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值