自写第一个简单的爬虫程序(教程来自B站)

自写第一个简单的爬虫程序(教程来自B站)

由于之前有一点爬虫基础,但是无奈太懒,一直都没有进行深入学习,更没有实战,昨天心血来潮看了B站的视屏,爬取对象是一个小说网站的一部小说,将该章节和文本写入以小说名命名的txt文件里,教程视屏录制时间比较早,加之该网站进行了一定的反爬手段,使得与教程的代码有些出入,索性自己爬了一个,在原代码上做了些许调整,在这次学习中用到了re模块的findall函数,以及sub函数,学习了正则表达式的简单运用,以及python下文件的写入。

import requests
import re
#由于该网站有一定的反爬机制,故用Headers头模仿谷歌Chrome进行访问
req=requests.get("https://www.jingcaiyuedu.com/novel/BbDze4/list.html",headers={'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"})
req.encoding="UTF-8"
list_text=req.text#爬取小说目录的源代码
novel_info=re.findall(r'<dd class="col-md-4">.*?<a href="(.*?)">(.*?)<.*?</dd>',list_text,re.S) #获取小说章节以及相对应的跳转的url片段
novel_name=re.findall(r'<meta property="og:title" content="(.*?)"/>',list_text,re.S)#获取小说名字
#将小说写入文本
with open('%s.txt'%novel_name[0],'w') as f:
    for novel_Eachinfo in novel_info:
        Each_url,Each_title=novel_Eachinfo
        #获取完整的url
        Each_Realurl="https://www.jingcaiyuedu.com%s"%Each_url
        req1=requests.get(Each_Realurl,headers={'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"})
        req1.encoding = "UTF-8"
        Each_content=re.findall(r'最快更新.*?<p>(.*?)<div>',req1.text,re.S)
        #由于后续章节需要公众号连接无法直接爬取,故增加判断是否返回空列表
        if (Each_content!=[]):
            #数据清洗,删除段落符号,使用re模块的sub函数,删除字符串
            Each_content_cleaned=re.sub(r'<.*?>',"",Each_content[0])
            f.write(Each_title)
            f.write("\n"*2)
            f.write( Each_content_cleaned)
            f.write("\n"*2)
print("successed")

结果:
自写第一个简单的爬虫程序(教程来自B站)

自写第一个简单的爬虫程序(教程来自B站)自写第一个简单的爬虫程序(教程来自B站) weixin_41331701 发布了2 篇原创文章 · 获赞 0 · 访问量 67 私信 关注
上一篇:正则表达式 查找网页源代码 提取指定内容


下一篇:记录日志写入数据库实现查询