Python 爬虫学习3 -简单抓取小说网信息

Posted irislee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 爬虫学习3 -简单抓取小说网信息相关的知识,希望对你有一定的参考价值。

小说网 https://www.qu.la/paihangbang/

功能:抓取每个排行榜内的小说名和对应链接,然后写入excel表格里面。

按F12 审查页面元素可以得到你所要的信息的class,从而来定位。

具体看代码讲解吧。

#coding:utf-8  #为了正常转码 必写
import codecs  #为下面新建excel,转码正确准备得一个包

__author__ = Administrator
import requests
from bs4 import BeautifulSoup
"""
get_html函数是为了抓取对应url的html页面,然后返回这个页面。
其实也可以全部写入一个函数,不过这样就会显得函数很臃肿。
将这种公共函数独立来写,进行封装,有助于以后重复利用。
"""
def get_html(url): try: r = requests.get(url,timeout = 3000) r.raise_for_status r.encoding = utf-8 return r.text except: return """
get_content函数是用来提取你所需要的信息的,并把信息写入excel表格。
"""
def get_content(url):
    url_list = []
    html = get_html(url).encode(utf-8)
    soup = BeautifulSoup(html, "html.parser")
    category_list = soup.find_all(div, class_=index_toplist mright mbottom)
    history_list = soup.find_all(div, class_ = index_toplist mbottom)
    for cate in category_list:
        name = cate.find(div, class_ = toptab).span.text
        name = name.encode(utf-8)
        with codecs.open(novel_list.csv,a+,utf-8) as f:
            f.write(
小说种类:{}
.format(name))

        book_list = cate.find(div, class_ = topbooks).find_all(li)
        for book in book_list:
            link = http://www.qu.la/+book.a[href]
            title = book.a[title].encode(utf-8)
            url_list.append(link)
            with codecs.open(novel_list.csv,a+,utf-8) as f:
                f.write(小说名:{} 	 小说地址:{}
.format(title,link))

    for cate in history_list:
        name = cate.find(div, class_=toptab).span.string
        with codecs.open(novel_list.csv,a+,utf-8) as f:
            f.write("
小说种类:{} 
".format(name))

        general_list = cate.find(style=display: block;) #找到总排行榜
        book_list = general_list.find_all(li)
        for book in book_list:
            link = http://www.qu.la/ + book.a[href]
            title = book.a[title]
            url_list.append(link)
            with codecs.open(novel_list.csv,a+,utf-8) as f:
                f.write("小说名:{:<} 	 小说地址:{:<} 
".format(title, link))
    return url_list



def main():
    # 排行榜地址
    base_url = http://www.qu.la/paihangbang/
    # 获取排行榜中所有小说链接
    url_list = get_content(base_url)


if __name__==__main__:
    main()

本次主要是记录编码问题。

编写完后run完出来是一个乱码的excel表格

然后就开始进行debug

在每一步设置断点,观察每个变量 name title这些到底是用什么编码

现在这个版本,我基本是都加上了.encode(‘utf-8‘)

出来时每一个都是string变量

可是加了后还是乱码。

然后我尝试把信息写入txt文档,发现成功了。

所以问题在于写入excel,excel不能正确编码,所以我改成了codecs.open(‘novel_list.csv‘,‘a‘,‘utf-8‘) 

最终成功解决问题。

思路仅供参考 编码问题一直都会有,真的是头大。

以上是关于Python 爬虫学习3 -简单抓取小说网信息的主要内容,如果未能解决你的问题,请参考以下文章

python学习笔记--爬虫隐藏代理

Python爬虫学习路线,强烈建议收藏

Python爬虫学习路线,强烈建议收藏

python预课04 列表,元祖,统计值计算示例,爬虫初步学习( 编辑中)

Python爬虫(学习准备)

Python爬虫学习——使用selenium和phantomjs爬取js动态加载的网页