python爬虫之笔趣文学

版权声明:本文为博主原创文章,转载请备注https://blog.csdn.net/travelerwz。 https://blog.csdn.net/Travelerwz/article/details/84053647

python爬虫之笔趣文学


我们来一起爬爬笔趣文学这个网站,仅仅作为学习来使用


1.获取URL和解析页面
随便找一篇文章:元尊
url:https://www.biqukan.com/0_790/
在这里插入图片描述
好了,知道这个页面结构,我们就可以进行解析了:

# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests,sys
#url
url = "https://www.biqukan.com/0_790/"
response = requests.get(url).text
#解析网页
soup = BeautifulSoup(response,'lxml')
div = soup.find_all('dl')
print(div)

结果:

[<dl>
<dt>《元尊》最新章节列表</dt>
<dd><a href="/0_790/22893899.html">第六百三十九章 过时</a></dd>
<dd><a href="/0_790/22883757.html">第六百三十八章 斗法</a></dd>
<dd><a href="/0_790/22873845.html">第六百三十七章 大战起</a></dd>
<dd><a href="/0_790/22862545.html">第六百三十六章 第三道圣纹</a></dd>
<dd><a href="/0_790/22850081.html">第六百三十五章 神秘玉璧</a></dd>
........

由此我们知道了每篇文章的名称和href


2.获取每篇文章的url和内容
我们随便打开一篇文章会发现,它的url是https://www.biqukan.com/0_790/22893899.html,和我们前面比较就是https://www.biqukan.com/0_790/+href的组合,由此我们就知道了每篇文章的url了。
我们先拿一片文章联系一下:

# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests,sys
#url
url = "https://www.biqukan.com/0_790/"
url_txt = 'https://www.biqukan.com/0_790/22893899.html'
#response = requests.get(url).text
#解析网页
#class_是为了避免和python中的关键字class冲突
#soup = BeautifulSoup(response,'lxml')
#div = soup.find_all('div',class_='listmain')
#print(div)
response = requests.get(url_txt).text
soup = BeautifulSoup(response,'lxml')
div = soup.find_all('div',class_='showtxt')
print(div[0].text)

结果:

        “而你们苍玄宗,已经过时了!”  https://www.biqukan.com/0_790/22893899.html  请记住本书首发域名:www.biquka

郁闷,为什么内容显示不全,查了好久的资料,也没有查出个所以然来,希望大家知道赐教一下!!!
我分析了一下网页,发现我这样写没什么问题,猜测是不是编译器的原因,果然,我在cmd上运行,结果是对的,麻蛋,浪费时间。
在这里插入图片描述


3.保存数据
我们先采用写入文件的方式来保存

# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests,sys
#url
url = "https://www.biqukan.com/0_790/"
url_txt = 'https://www.biqukan.com/0_790/22893899.html'
#response = requests.get(url).text
#解析网页
#class_是为了避免和python中的关键字class冲突
#soup = BeautifulSoup(response,'lxml')
#div = soup.find_all('div',class_='listmain')
#print(div)
response = requests.get(url_txt).text
soup = BeautifulSoup(response,'lxml')
div = soup.find_all('div',class_='showtxt')
print(div[0].text)
with open("2.txt",'a', encoding='utf-8') as f:
 #   f.write(name + '\n')
    f.writelines(div[0].text)
    f.write('\n\n')

我们会发现当前目录下出现了2.txt的文件,打开正是我们爬取的内容


4.整合代码
我们将目录和内容放在一起,爬取所有文章内所有章节的内容

# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests,sys

class Biquwen(object):
    def __init__(self):
        self.url = "https://www.biqukan.com/0_790/"
        self.url2 = "https://www.biqukan.com"
        self.name = []
        self.nums = []
        self.urls = []
    def get_url(self):
        response = requests.get(self.url).text
        #解析网页
        #class_是为了避免和python中的关键字class冲突
        soup = BeautifulSoup(response,'lxml')
        divs = soup.find_all('dd')
        self.nums = len(divs[12:])
        for div in divs:
            #取标签和路径
            self.name.append(div.string)
            self.urls.append(self.url2+div.a.get('href'))
    '''
    @获取每章节的内容
    '''
    def get_text(self,url2):
        response = requests.get(url = url2).text
        soup = BeautifulSoup(response,"lxml")
        divs = soup.find_all('div',class_="showtxt")
        divs = divs[0].get_text()
        return divs

    '''
    @写入文件
    '''
    def write_text(self,name,path,tet):
        with open(path,'a', encoding='utf-8') as f:
            #print(tet)
            f.write(name + '\n')
            f.write(str(tet))
            f.write('\n\n')

if __name__=="__main__":
    bi = Biquwen()
    bi.get_url()
    for num in range(bi.nums):
        #print(bi.get_text(bi.urls[num]))
        bi.write_text(bi.name[num],"元尊.txt",bi.get_text(bi.urls[num]))

最后,我们会发现我们的文件夹下面有了元尊.txt这个文件,所有的内容也被写进去了。
OK,终于搞定了。

猜你喜欢

转载自blog.csdn.net/Travelerwz/article/details/84053647
今日推荐