2022年 11月 7日

python3爬虫学习

python3爬虫学习

一、爬虫流程:

①先由urllib的request打开Url得到网页html文档

②浏览器打开网页源代码分析元素节点

③通过Beautiful Soup或则正则表达式提取想要的数据

④存储数据到本地磁盘或数据库(抓取,分析,存储)
二、网页审查元素
1、通过URL访问页面,点击F12进入开发者模式后,可以查看当前页面的HTML信息,通过修改HTML信息可以再客户端实现信息的”整容“,但修改的信息不会回传到服务器,服务器存储的HTML信息不会改变。刷新一下界面,页面还会回到原本的样子。
2、简单实例
1)安装requests第三方库
cmd进入命令窗口,通过cd /d D:\python\Scripts 进入python安装路径下的Scripts路径,输入命令pip install requests命令进行安装(注:若安装时提示pip版本不匹配,重新打开cmd窗口,通过命令 python -m pip install –upgrade pip升级后重新打开cmd窗口进行安装requests库即可。)
2)简单实例
requests库的基础方法如下:
在这里插入图片描述
常用的为requests.get()方法跟requests.post()方法。
requests.get()方法用于向服务器发起GET请求,从服务器得到数据。
例如:

import requests

if __name__ == '__main__':
    target = 'http://gitbook.cn/'
    req = requests.get(url=target)
    print(req.text)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

requests.get()方法必须设置的一个参数就是url,因为我们得告诉GET请求,我们的目标是谁,我们要获取谁的信息。
通过requests.get()方法,我们可以顺利的获得网页的HTML信息,但是很多信息是我们不想看到的,我们只想获得正文内容,我们不关心div、br这些html标签。如何把正文内容从这些众多的html标签中提取出来呢?,这是就需要另一个工具Beautiful Soup登场了。
3)Beautiful Soup
爬虫的第一步,是获取整个网页的HTML信息,接下来就是爬虫的第二步,解析HTML信息,提取我们感兴趣的内容。提取的方法有很多,例如使用正则表达式、Xpath、Beautiful Soup等。对于初学者而言,最容易理解,并且使用简单的方法就是使用Beautiful Soup提取感兴趣内容。
Beautiful Soup的安装同requests一样,在D:\python\Scripts 路径下输入命令pip install beautifulsoup4命令进行安装。

# -*- coding:UTF-8 -*-
import requests

if __name__ == '__main__':
    target = 'http://www.biqukan.com/1_1094/5403177.html'
    req = requests.get(url=target)
    print(req.text)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

上述代码爬取了”笔趣阁“上一本小说的的HTML信息,如何获取我们所需要的小说正文内容呢?
HTML标签是HTML语言中最基本的单位,也是最重要的组成部分。html标签就像一个个“口袋”,每个“口袋”都有自己的特定功能,负责存放不同的内容。
例如一个标签是这样的:

<div id="content", class="showtxt">
  • 1

其中id和class就是div标签的属性,content和showtxt是属性值,一个属性对应一个属性值。
仔细观察目标网站一番,我们会发现这样一个事实:class属性为showtxt的div标签,独一份!这个标签里面存放的内容,是我们关心的正文部分。

知道这个信息,我们就可以使用Beautiful Soup提取我们想要的内容了,编写代码如下:

# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import requests
if __name__ == "__main__":
     target = 'http://www.biqukan.com/1_1094/5403177.html'
     req = requests.get(url = target)
     html = req.text
     bf = BeautifulSoup(html)
     texts = bf.find_all('div', class_ = 'showtxt') 
     print(texts)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在解析html之前,我们需要创建一个Beautiful Soup对象。BeautifulSoup函数里的参数就是我们已经获得的html信息。然后我们使用find_all方法,获得html信息中所有class属性为showtxt的div标签。find_all方法的第一个参数是获取的标签名,第二个参数class_是标签的属性,这里使用class_表示标签的class属性,class_后面跟着的showtxt就是属性值了。
但是在正文中有很多我们不想看到的空格,div标签等,这些如何去除呢:

from bs4 import BeautifulSoup
import requests
if __name__ == "__main__":
     target = 'http://www.biqukan.com/1_1094/5403177.html'
     req = requests.get(url = target) 
     html = req.text
     bf = BeautifulSoup(html)
     texts = bf.find_all('div', class_ = 'showtxt')
     print(texts[0].text.replace('\xa0'*8,'\n\n'))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

find_all匹配的返回的结果是一个列表。提取匹配结果后,使用text属性,提取文本内容,滤除br标签。随后使用replace方法,剔除空格,替换为回车进行分段。 在html中是用来表示空格的。replace(‘\xa0’*8,’\n\n’)就是去掉下图的八个空格符号,并用回车代替:于是,我们很自然的匹配到了所有正文内容,并进行了分段。