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

一开始学习编程,是高考落榜后,阴差阳错的选择了一个技术学院去学的。学的是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('正文(.*?)', 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('

(.*?)

'
, html_content,re.S).group(1) text_block = re.search('"content">(.*?)net',html_content,re.S).group(1) text_block = text_block.replace('
'
,'').replace(' ','\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设置。顺利爬取了上百章,然后又出问题了,就是被网站认为是在攻击,启动反爬虫了。这个呢,我暂时解决不了,菜鸟嘛,今天先记录下这个情况,后面会记录如何解决这个问题的。嘻嘻第一次写技术博客。
《自学是一门手艺》笑来老师说,知识本身是枯燥的,所以我们要自己学会让它变得有趣,在这里记录也是一种学习方式。同时允许一开始自己的笨拙,就像小孩子学走路一样,然后使用最少必要知识马上开始用,不要等到什么都学了再用,那样永远不会开始了。
我相信我会学会自学能力,同时学会编程的。加油,共勉!

你可能感兴趣的:(爬虫,python)