学习进度-2

小说爬取

1.获得文章的每个章节链接地址
2.获得章节内容
3.保存到指定位置

 

import urllib
import urllib.request
import urllib.parse
import os
import lxml
import lxml.html
from bs4 import BeautifulSoup

oright_url = '小说网站网址'
cataher_url = urllib.parse.urljoin(oright_url,'目录章节')
chat_list = []
headers = {
    'Host':'www.xxx.com',
    'Referer':'http://www.xxx.com',
    'User-Agent':''
}

def geturl(): #得到小说章节的网址
    req = urllib.request.Request(cataher_url,headers=headers)
    html = lxml.html.parse(urllib.request.urlopen(req))
    hrefs = html.xpath('//dd/a/@href')      #解析网站网址
    for href in hrefs:                      #遍历的到的小说章节网址
        chat_list.append(urllib.parse.urljoin(oright_url,href)) # 拼接网址 将得到的网址保存到列表中
    print(chat_list)
geturl()

def geturlbody():         #获得网站正文并保存
    req = urllib.request.Request(cataher_url,headers=headers)
    html = lxml.html.parse(urllib.request.urlopen(req))
    for chat in chat_list:          #遍历所有网址
        html = urllib.request.urlopen(chat)     # 打开遍历得到的网址
        soup = BeautifulSoup(html,'lxml')       # 用BeautifulSoup解析网址
        title = soup.h1.string                  # 得到h1内的章节标题
        f = open ('小说名字.txt','a+',encoding='utf-8') #   小说保存的文件
        f.write('\n'+title)                     # 保存小说章节的标题
        for content in soup.find_all('p'):      # 遍历小说得到节点为'p'中的内容
            f.write('\n'+content.string)        # 逐行保存
        f.close()                               # 储存完成 关闭文档
        print('======>'+title)
geturlbody()

 

posted @ 2021-10-21 22:37  Zeta——  阅读(33)  评论(0编辑  收藏  举报