美文网首页python成长之路
python爬虫之笔趣文学

python爬虫之笔趣文学

作者: CPP后台服务器开发 | 来源:发表于2018-11-15 07:54 被阅读10次

    python爬虫之笔趣文学


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


    1.获取URL和解析页面
    随便找一篇文章:元尊
    url:https://www.biqukan.com/0_790/

    snipaste_20181114_070528.png

    好了,知道这个页面结构,我们就可以进行解析了:

    # -*- 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上运行,结果是对的,麻蛋,浪费时间。


    snipaste_20181114_081641.png

    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,终于搞定了。

    相关文章

      网友评论

        本文标题:python爬虫之笔趣文学

        本文链接:https://www.haomeiwen.com/subject/fydefqtx.html