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