python爬虫基础–爬取小说
我这里用的小说是墨香铜臭的《天官赐福》,暂时先爬取前二十章;
话不多说,先放代码:
import requests
from bs4 import BeautifulSoup
import re
import bs4
import os
root="C://Users//86177//Desktop//天官赐福//" #这是根目录,保存在桌面上;
baseurl="http://www.jjwxc.net/onebook.php?novelid=3200611&chapterid=" #这是基本的url;
findNe=re.compile(r'<br/>(.*?)<br/>') #正则表达式--内容;
findBiao=re.compile(r'<h2>(.*?)</h2>') #标题;
# r=requests.get(url)
# print(r.encoding)
# print(r.apparent_encoding)
def getHTML(url): #爬取基本网页;
try:
kv={"User-Agent":"Mozilla/5.0"} #改变访问头,防止反爬;
r=requests.get(url,headers=kv)
r.raise_for_status()
r.encoding="gbk" #原来网站的编码方式是gbk,害
return r.text
except:
return "error!"
def getData(baseurl):
if not os.path.exists(root):
os.mkdir(root) #建立一个根目录;
for k in range(1,21): #爬取1-20章;
path=root+"第%d章.txt"%k #子路径;
if not os.path.exists(path):
url=baseurl+str(k) #终极url
html=getHTML(url)
soup=BeautifulSoup(html,"html.parser") #做一锅汤;
#print(soup)
for a in soup.find_all("div",class_="noveltext"): #使用谷歌浏览器,用Fn+F12键可以看到源码
a=str(a)
#print(a)
Biao=re.findall(findBiao,a) #对于正则的匹配必须是字符串形式;
Ne=re.findall(findNe,a)
Ch=len(Ne) #得到的长度;每句话是一个字符串,但是返回的Ne是一个列表形式;
#print(Ch)
print(" 第{}章 {:^20}".format(k,Biao[0]))
f = open(path,"w") #打开文件;
f.write("\t第%d章\t"%k) #创建一个txt文件,并将其命名;
f.write(Biao[0]) #写入章节名称,是字符串形式;
f.write("\n") # 换行;
for i in range(Ch): #再在里面写入一行行;
f.write(Ne[i])
f.write("\n") #这里这么做是为了换行;
f.close()
else:
print("文件已存在!")
def main():
getData(baseurl)
main()
用谷歌浏览器打开网页,用Fn+F12组合键就可以看到网页的代码并进行分析!