本篇文章用到三个库,分别是re,os,requests库,他们的分别对应:
1.re是正则表达式库,是用来提取特定文本内容的
2.os对文件夹进行创建删除(作用之一)
3.获取网页内容
在爬虫中,对于正则表达式我们常用的符号有(),.,,?,,\d;
一般(.?),(.*)这两者最为常见,二者区别是第一个是非贪婪模式,第二个是贪婪模式
import re
s = 'asasasas'
li = re.findall('(as.*?)',s)
print(li)
li = re.findall('(as.*)',s)
print(li)
得到的对应结果:
['as', 'as', 'as', 'as']
['asasasas']
话不多说直接上代码!
import re
import os
import requests
def get_url(html):
'''通过查看原网页发现给网页使用过GBK方式进行编码的,
先通过抓大把需要的大体的内容进行抓取,然后在进行细分
(通过正则表达式),把每一章的链接给爬下来,返回一个列表'''
tx_url = []
response = requests.get(html).content.decode('GBK')
response1 = re.search('(第一卷 地窖囚奴.*?)</tbody>',response,re.S).group(1)
tx_ = re.findall('<a href="(.*?)">',response1,re.S)
for url in tx_:
tx_url.append(html + url)
return tx_url
def get_txt(url):
'''对于每一章,通过原网页代码分析,
我们用正则表达式可以把每一章的标题和内容进行提取出来
然后将其存入对应的目录中'''
response = requests.get(url).content.decode('GBK')
tx_title = re.findall('<title>(.*?)</title>',response,re.S)[0]
tx_txt = re.findall('<p>(.*?)</p>',response,re.S)[0]
tx_txt = tx_txt.replace('<br />','')
file_path = os.path.join('十宗罪',tx_title + '.txt')
with open(file_path,'w',encoding='GBK') as f:
f.write(tx_txt)
os.makedirs('十宗罪',exist_ok= True)#创建一个新文件夹
tx_url = get_url('https://www.kanunu8.com/book/4514/')#获取每一章的链接
for url in tx_url:
get_txt(url)
代码不难,但是在爬虫初学阶段对于相应的套路还是有所生疏,在今后的生活中,应多注意思维和习惯的养成。