python爬虫基础---爬取小说

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组合键就可以看到网页的代码并进行分析!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值