美文网首页
实战爬取起点中文网全部作品信息(基于lxml)

实战爬取起点中文网全部作品信息(基于lxml)

作者: libdream | 来源:发表于2018-12-26 09:14 被阅读0次

    目标

    爬取起点中文网全部作品前100页的信息,需要爬取的有小说名(title)、作者ID(author)、小说类型(style)、完成情况(complete)、摘要(abstract)和字数(words)。

    网址

    https://www.qidian.com/all

    思路

    (1)打开网址,手动浏览,发现第2页地址是:

    https://www.qidian.com/all?orderId=&style=1&pageSize=20&siteid=1&pubflag=0&hiddenField=0&page=2
    

    猜想这些字段是用来控制作品分类的,我们爬取的为全部作品,所以依次删除一些参数检查,发现将网址改为https://www.qidian.com/all?page=2后,也可以访问相同的信息,通过多页检验,证明了修改的合理性,以此来构造前100页URL。

    (2)爬取相关信息

    (3)将爬取的信息写入excel

    在实际爬取过程中,发现字数在源码里显示的是

    𘢈𘢌𘢈𘢍𘢅𘢇

    用老方法爬取时会报错,网上查了下,说是是 HTML、XML 等 SGML 类语言的转义序列(escape sequence)。它们不是「编码」。原谅我还是渣渣,暂时还没找到解决方法,所以先忽略字数。

    具体代码如下:

    import xlwt,time
    from lxml import etree
    import requests
    
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 \
    (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
    
    all_info_list = []      #初始化列表,存入爬虫数据
    
    def getInfo(url):
        r = requests.get(url, headers=headers)
        selector = etree.HTML(r.text)
        infos = selector.xpath('//ul[@class="all-img-list cf"]/li')     #定位大标签,以此循环
        for info in infos:
            title = info.xpath('div[2]/h4/a/text()')[0]
            author = info.xpath('div[2]/p[1]/a[1]/text()')[0]
            style_1 = info.xpath('div[2]/p[1]/a[2]/text()')[0]
            style_2 = info.xpath('div[2]/p[1]/a[3]/text()')[0]
            style = style_1 + '.' + style_2
            complete = info.xpath('div[2]/p[1]/span/text()')[0]
            abstract = info.xpath('div[2]/p[2]/text()')[0].strip()
    ##        words = decodeHtml(info.xpath('div[2]/p[3]/span/span/text()')[0])
            info_list = [title,author,style,complete,abstract]
            all_info_list.append(info_list)     #数据存入列表
    
        time.sleep(1)   
        pass
    
    if __name__ == '__main__':
        urls = ['https://www.qidian.com/all?page={}'\
                .format(str(i)) for i in range(1,100)]
    
        for url in urls:
            print('正在爬取'+url)
            getInfo(url)
    
        head = ['title', 'author', 'style', 'complete', 'abstract']    #定义表头 
        book = xlwt.Workbook(encoding='utf-8')  #创建工作簿
        sheet = book.add_sheet('Sheet1')        #创建工作表
        for h in range(len(head)):
            sheet.write(0, h, head[h])          #写入表头
    
        j = 1        #行数
        for li in all_info_list:
            k = 0    #列数
            for data in li:
                sheet.write(j, k, data)
                k += 1
            j += 1      #写入爬虫数据
    
        book.save('xiaoshuo.xls')       #保存文件
        pass
    
    
    
    
    image

    相关文章

      网友评论

          本文标题:实战爬取起点中文网全部作品信息(基于lxml)

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