此链接是正则表达式的知识点,知识点与实例结合起来有助于理解哦!—— Python基础——正则表达式
本次爬虫,我是对努努书坊 — 小说在线阅读中的《后宫:甄嬛传1》进行爬取。
爬虫思路如下:
1、进入小说目录的界面(此时链接为 url = /book/3813/),点击右键,查看网页源代码,找到含有目录的地方,通过下面代码可以将" width=25%(如果没有则为空字符串)、href 以及 目录"以列表的形式爬取下来:
m1=pile(r'<td( width="25%")?><a href="(.+\.html)">(.+)</a></td>')
小说部分目录:爬取结果如下:
2、点击目录前的链接 href,便能跳到相应章节的网页源代码(此时链接为 /book/3813/38501.html),观察链接的规律可发现:章节内容的链接等于 url(小说目录界面的链接) + href
观察可发现作者简介的内容在一对尖括号 <p></p> 中,通过下面代码可将其提取出来
m2=pile(r'<p>(.+)</p>',re.S)
作者简介的部分网页源代码:由上图可知,<br />也是多余的,可通过以下代码将其去掉
m3=pile(r"<br />")nrl=m3.sub("",nr)
以下是爬取《后宫:甄嬛传1》的完整代码:
#小说爬虫 作者:成纤纤import requestsimport reurl="/book/3813/"txt=requests.get(url).content.decode("gbk")m1=pile(r'<td( width="25%")?><a href="(.+\.html)">(.+)</a></td>')m2=pile(r'<p>(.+)</p>',re.S)m3=pile(r"<br />")raw=m1.findall(txt) #将所有符合" width=25%(如果没有则为空字符串)、href 以及 目录"的字符串爬取下来ilist=[(i[2],url+i[1]) for i in raw]#将目录以及小说某章节的完整链接进行遍历print("小说目录已下载完毕!")with open("后宫:甄嬛传1.txt","a") as f: #文件读写for i in ilist:print("开始下载--->",i[0]) #i[0] 为开始下载章节对应的目录t1=requests.get(i[1]).content.decode("gbk")nr=m2.findall(t1)[0] #读取尖括号<p></p>中的内容nrl=m3.sub("",nr)#去除尖括号<p></p>中的<br />f.write(i[0].center(200)) #以下代码是为了提高爬取下来小说的可读性,使标题与内容之间有间距f.write('\n\n')f.write(nrl)f.write('\n\n')print("下载完毕!")
建议大家可以照着敲一敲,如果有不懂的地方将其结果打印出来(print) ,对代码进行调试。或者可以留言,我看到之后会立马进行回复的^_^