美文网首页Android开发经验谈Android开发Android技术知识
Python爬虫实战(2)-爬取小说"斗罗大陆3龙王传

Python爬虫实战(2)-爬取小说"斗罗大陆3龙王传

作者: 秦子帅 | 来源:发表于2018-03-24 13:33 被阅读257次

    前言

    首先,我们来回忆一下上篇爬虫实战讲了什么:讲到了requests和bs4和一些网页基本操作。如果有不熟悉的朋友可以去看看:

    Python爬虫实战(1)-爬取“房天下”租房信息(超详细)

    今天我们用re模块+requests来实战爬取一下,并写入TXT文件中,效果图如下:

    image

    实战

    我们今天来爬取一下5200小说网的小说“罗大陆3龙王传说”并写入TXT文件中,我们先分析一下章节网址的规律:

    http://www.5200xs.org/52002847/1081834.html

    http://www.5200xs.org/52002847/1081835.html

    从而得知规律是网址数字的增加。

    步骤:

    1.先获取网页数据,用requests获取,这个大家都会吧?上篇实战文章已经讲过了,这里的url我们一会再赋值:

    
    import  requests
    
    def get_data(url):
       headers = {
           'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36'}
    
       data = requests.get(url,headers=headers)
       # 因为直接请求出来的是乱码,所有设置一下编码格式
       data.encoding = "gbk"
       print(data.text)
    
    

    2.根据re模块去提取你想要的信息-标题和内容

    首先先讲一下符号 (.?)的用法,就是表示匹配xx和xx间的任何字符。用法就是‘xx(.?)xx’

    标题:

    获取代码:

    
    title = re.findall('<h1>(.*?)</h1>', data.text, re.S)
    
    

    内容:

    image

    获取代码:

    
    content = re.findall('<div id="content">(.*?)</div>', data.text, re.S)
    
    

    获取之后会有各种的符号,我们可以把它代替出来:

    
    if content.__len__()>0:
               str = content[0].replace("&nbsp;&nbsp;&nbsp;&nbsp;", "").replace("<br />", "")
    
    

    3.就是通过循环依次获取当前的网页数据,并写入TXT文件中。

    完整代码如下:

    
    import  requests
    import  re
    #创建TXT文件,其中的"a+"是一种模式,表示用于读写,追加模式。
    f = open("C:/Users/Administrator/Desktop/qi.txt","a+")
    
    def get_data(url):
       headers = {
           'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36'}
    
       data = requests.get(url,headers=headers)
       # 因为直接请求出来的是乱码,所有设置一下编码格式
       data.encoding = "gbk"
        #获取网页数据成功
       if data.status_code==200:
    
           title = re.findall('<h1>(.*?)</h1>', data.text, re.S)     #标题
           content = re.findall('<div id="content">(.*?)</div>', data.text, re.S)     #内容
           if content.__len__()>0 and title.__len__()>0:
               str =title[0]+"\n\n"+  content[0].replace("&nbsp;&nbsp;&nbsp;&nbsp;", "").replace("<br />", "")     #标题和内容拼在一起
               f.write(str)     #写入TXT
       #获取失败
       else:
           pass
    
    if __name__ == '__main__':
       #这里为了给大家演示,只是取了前一百章
       urls = ["http://www.5200xs.org/52002847/{}.html".format(str(i)) for i in range(1081834, 1081933)]
       for i in urls:
           get_data(i)
       f.close()
    
    

    希望对刚入门的朋友有所帮助!


    相关文章

      网友评论

        本文标题:Python爬虫实战(2)-爬取小说"斗罗大陆3龙王传

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