瑟瑟发抖,小白的python第一课——网络爬虫

         作为python小白,总是在网络上看到关于python爬取各种数据的新闻,于是决定尝试之!

一:首先是python的安装,下载地址: https://www.python.org/downloads/release/python-370/

瑟瑟发抖,小白的python第一课——网络爬虫_第1张图片

我是win64的电脑,所以直接下载win64的安装包,下载完成之后傻瓜式下一步完成安装

为了免去配置环境变量,python有个很友好的设置,直接为你的电脑添加环境变量,安装完成之后,CMD输入python:

瑟瑟发抖,小白的python第一课——网络爬虫_第2张图片

到这里,python安装完成。

二:安装IDE

     对于一个新手来说,直接用shell开发是不友好的(好吧,我承认单纯觉得太丑  #微笑),所以安装Pycharm,下载地址:http://www.jetbrains.com/pycharm/download/#section=windows,为了避免选择安装路径的一系列麻烦事,直接下一步,简单粗暴。安装完成之后,就可以开始写helloworld啦,是不是很方便呢。

三:小试牛刀——小爬虫

     python要编写爬虫,最快捷的方式就是用第三方库,在此小白同学选择的是requests+beautifulsoup。

    (1):首先在你的IDE安装这两个库,File--->setting--->选择--->project+你的项目名--->project intercepter--->点击右边的+号,进入搜索第三方库的页面,搜索requests库和beautifulsoup库,installpackage会自动帮你安装咯。

瑟瑟发抖,小白的python第一课——网络爬虫_第3张图片瑟瑟发抖,小白的python第一课——网络爬虫_第4张图片

瑟瑟发抖,小白的python第一课——网络爬虫_第5张图片

(2):开始代码。好啦,至此已经做好准备工作啦,接下来就开始编写代码咯,吼吼,终于来到了小白最兴奋的地方。在工作目录下File--->new file,为了省略麻烦步骤(只是学习用),所以直接创建.py文件用于编写代码,先贴代码,然后一步步解释:

# -*- coding: UTF-8 -*-

import requests
from bs4 import BeautifulSoup
import os

'''
发送请求的方法
'''
def getHtml(url):
    req = requests.get(url=url)
    html_doc = req.text
    return BeautifulSoup(html_doc, "html5lib")

'''
获取小说目录的方法
返回一个标签列表
'''
def getDirs():
    soup = getHtml("https://www.biqukan.com/1_1094/")
    texts = soup.find_all("div", class_="listmain")
    soup1 = BeautifulSoup(str(texts[0]), "html5lib")
    texts1 = soup1.find_all("a")
    return texts1

'''
获取小说正文的方式
'''
def getdoc(url):
    soup = getHtml(url=url)
    texts = soup.find_all('div', class_="showtxt")
    return texts[0].text



def main():
    server = "https://www.biqukan.com"
    alist = getDirs();
    i = 0
    for each in alist:
        if i >= 12: #去掉不想要的章节
            url = server+each.get("href") #每一章节小说的路径
            textName = each.string #每一章节小说的题目
            path = os.getcwd() #工作目录的路径
            text = getdoc(url)
            with open(path+"/一念永恒.txt", "a+t", encoding="utf8") as file:
                file.write(textName+"\n"+text+"\n")
        i += 1

if __name__ == '__main__':
    main()

对以上代码做以下说明:

   ① # -*- coding: UTF-8 -*-   听前辈说python要用中文就必须要这行,遂写之,小白不怕麻烦。

   ②然后引入requests库,beautifulsoup库和html5lib,html5lib是为了防止代码乱码,之后在代码里面解释

   ③为了使代码看起来结构更好,更有层次感,所以对代码进行了函数封装,一个一个来。

 

        说明:小白同学这次的学习是爬取我们家“白小纯”的一个过程(小说《一念永恒》),网站是[笔趣看]

 

      ③-1:getHtml方法是一个可重用的方法,直接用于创建requests连接,获取返回的数据,并return html_doc,这样在其它方法里面就不用再写requests的语句了。requests连接的方法有很多,在此处小白只用了get访问,如果需要具体了解,请参看requests的中文文档http://docs.python-requests.org/zh_CN/latest/user/quickstart.html。通过get访问,小白获取了需要的页面的html内容,然后通过req.text来获取页面的内容,再然后创建一个Beautifulsoup对象并return。在这里转换成Beautifulsoup对象的时候,括号里的参数"html5lib"不写的话,会出现警告,原理小白同学还不明白,先完成功能,之后再研究。

      ③-2:查看目录页面元素(一般的浏览器都是F12),小白同学发现,小说的目录列表都被一个div包裹着,而真正的章节路径和章节名都在里面的标签里面,如图

瑟瑟发抖,小白的python第一课——网络爬虫_第6张图片

    这个时候获取里面的内容就要用到Beautifulsoup库了。首先在getDirs()函数中,小白同学通过getHtml()函数获取到整个页面的内容,使用Beautifulsoup的find_all()函数,就可以获取到我想要的元素内容啦(特别说明:find_all()函数返回的是一个列表),然后小白同学再将列表里面的内容通过str()函数转换成字符串,再用Beautifulsoup创建一个Beautifulsoup对象,再通过find_all()就能获取所有标签的内容啦,return这个列表,小白同学就获取到了所有的章节目录和章节名啦。

    ③-3:getDoc()函数,通过小说的章节目录来获取小说的正文,方法同上,不做赘述了。

 

    ④最后最后就是小白同学本次学习最重要的内容啦——写入文件。喜欢的小说没法下载是不是很苦恼啊,不用怕,小白同学教你特殊的下载方法。在以上的内容中,小白同学获取到了《一念永恒》所有的章节名和章节内容,接下来就要写入到文件里面啦。python的文件操作需要import os库,os.getcwd()可以返回当前工作目录的路径,为了方便,小白同学就直接在当前目录创建文件啦。python创建文件也很简单,直接open()函数就可以。open()函数有不同的读写模式,在此小白同学既然是要下载整个小说,就选择了"a+t"的可追加读写模式。重要的问题说三遍:字符集,字符集,字符集(encoding='utf-8')。看到网上有说python默认gbk,小白同学还没考证,反正试着默认字符集是乱码。特别说明:with方法能够自动处理异常,避免使用try......finally,使代码更加简洁,但是貌似不加 'as'是错误的。

    好啦,以上就是小白同学今天的python第一课的学习啦,怎么样是不是很简单呢,大家快去试试吧(〃'▽'〃)

 

你可能感兴趣的:(python,爬虫,新手教程)