目录

  • 搭建环境
  • 安装爬虫库
  • 爬虫测试
    • 获取网页整体信息
      • 1.访问目标网页
      • 2.引入Requests库获取请求响应
      • 3.引入BeautifulSoup库格式化处理响应数据
    • 获取网页中特定信息
      • 1.找到目标HTML标签
      • 2.获取目标网页定位
      • 3.爬取指定数据信息

搭建环境

  在操作系统中安装好Python,这里采用的是Python 3.9.9;选择VS Code作为开发工具,安装Python插件,方便代码编辑和调试。

安装爬虫库

  初入爬虫世界,先要了解下今天用的常规工具库——RequestsBeautifulSoup
  Requests主要作用是请求网站获取网页数据,BeautifulSoup则可以轻松解析Requests库获得的网页信息,并把网页源代码解析为Soup文档,便于过滤提取数据。这里简单介绍一种安装方法如下,其它方法请大家自行搜索。

pip install requests
pip install bs4

爬虫测试

获取网页整体信息

1.访问目标网页

  使用Chromium内核的新版Edge浏览器打开任意网页,下图为网页网页,是一篇文章。



2.引入Requests库获取请求响应

  这里,我们新建一个python文件,引入Requests库,通过requests.get()以GET方式发送请求,获取响应信息。

import requests
res = requests.get("https://*.*.*")
print(res)
print(res.text)

  通过print()函数将响应结果的HTTP状态码响应消息内容输出后,结果如下。可以看出,数据结构不清晰,不利于我们分析数据,因此,需要对数据进行处理,方便查找分析。

3.引入BeautifulSoup库格式化处理响应数据

  我们在原有代码的基础上,添加BeautifulSoup相关代码,对Requests库获得的响应信息进行处理,将数据格式化,形成一个具有内在结构的 BeautifulSoup对象。

import requests
from bs4 import BeautifulSoup
res = requests.get("https://*.*.*")
soup = BeautifulSoup(res.text, 'html.parser')
print(soup.prettify())

  通过prettify()方法可以将Beautiful Soup文档树格式化,以Unicode编码输出,每个XML/HTML标签都独占一行,结果如下图所示,格式清晰,可视化效果好,方便分析。

获取网页中特定信息

  对于一个网页来说,我们感兴趣的往往是一部分特定信息,因此,可以利用Beautiful Soup的选择功能筛选出感兴趣的内容,予以爬取。下面我们来看看怎么去做。

1.找到目标HTML标签

  在网页上右键选择检查,可以打开网页调试工具,如下图所示。

  点击调试工具左上角的按钮(如下图所示)后,再点击左边网页中的某个目标元素,在右边调试部分便会高亮显示当前元素的标签信息。

2.获取目标网页定位

  以刚才打开的网页为例,这篇文章有很多标题,假设我们想要获取这些一级标题信息,该怎么办呢?我们可能发现,页面结构比较复杂,通过上一步操作无法获得目标的完整标签路径,也就是无法得到目标的准确位置,进而无法通过代码定位选择出我们需要的信息。这时,该怎么办呢?其实很简单,我们选中感兴趣的某个标题,比如Unicode编码这行,在调试器中看到这个元素的标签信息,如下图所示。

  此时,在该部分信息上点击右键->复制->复制Selector,可以获得目标网页定位#Unicode\%E7\%BC\%96\%E7\%A0\%81。于是,我们在代码响应信息处理部分加入以下代码,成功得到Unicode编码这行文章信息。

titles=soup.select('#Unicode\%E7\%BC\%96\%E7\%A0\%81')
print(titles)
[<h1 id="Unicode%E7%BC%96%E7%A0%81" name="Unicode%E7%BC%96%E7%A0%81">Unicode编码</h1>]

  可是,利用这个标签,我们无法获得其他一级标题信息,因为在HTML中#ID信息是唯一的,就像我们利用一个人的身份证没法找到另一个人一样。因此,这里我们不能使用#开头的元素ID信息。分析一级标题的标签信息,可以知道,该元素有idname,但两者都有可能是网页唯一的,不是一级标题的共同特点,因此,我们在调试器中将该元素的两个属性idname删除,使元素变成<h1>Unicode编码</h1>,此时采用之前的方法,在该部分信息上点击右键->复制->复制Selector,便可获得新的目标网页定位信息。

#react-root > div:nth-child(1) > div.J-body.col-body.pg-2-article > div.com-3-layout > div.layout-main > section.com-2-panel.col-2-article.J-articlePanel > div.com-markdown-collpase > div.com-markdown-collpase-main > div.rno-markdown.J-articleContent > h1:nth-child(8)

  其中,定位信息最后的h1:nth-child(8) 表示的是满足当前选择器条件的第8个<h1>元素。所以,我们推测,其他一级标题应该也是类似<h1>元素,因此,把nth-child(8)去掉应该就是我们要获取的一级标题的共同路径。

3.爬取指定数据信息

  获得一级标题共同路径信息后,将信息遍历输出,便可得到我们想要的数据信息,代码如下。

titles=soup.select("#react-root > div:nth-child(1) > div.J-body.col-body.pg-2-article > div.com-3-layout > div.layout-main > section.com-2-panel.col-2-article.J-articlePanel > div.com-markdown-collpase > div.com-markdown-collpase-main > div.rno-markdown.J-articleContent > h1")
for title in titles:print(title.get_text())

  titles参数存储有相关元素的标签信息,通过get_text()便可提取出该元素的文本信息,也就是最终我们感兴趣的所有一级标题信息。至此,我们便完成了爬虫第一步,虽然我们爬得很晚很慢,但我们依然有颗征服山顶的心。 加油,共勉!

概述
Unicode编码
UTF-8
UTF-16
JavaScript中的string与DOMString
总结

爬虫摸索中~~(PS:小小爬虫,何惧哉?且到明日,再看今朝。)相关推荐

  1. java使用爬虫_Java中如何使用爬虫进行解析?

    我们都知道可以用爬虫来找寻一些想要的数据,除了可以使用python进行操作,我们最近学习的java同样也支持爬虫的运行,本篇小编就教大家用java爬虫来进行网页的解析,具体内容请往下看: 1.spri ...

  2. 把爬取信息导出到mysql,关于爬虫学习的一些小小记录(四)——爬取数据存入数据库...

    关于爬虫学习的一些小小记录(四)--爬取数据存入数据库 创建数据库 pymysql 模块 具体操作 预知后事如何 前面我们已经讲了怎么访问网页,并且从网页源码中提取数据.既然数据有了,怎样管理就是下一 ...

  3. 关于爬虫学习的一些小小记录(三)——BeautifulSoup

    关于爬虫学习的一些小小记录(三)--BeautifulSoup Beautiful Soup 使用 Beautiful Soup 修改代码 黑猫白猫 前面讲了一些访问页面和提取数据的基础方法,学会了挥 ...

  4. python学习之小小爬虫

    学习python一段时间了,写了一个图片的小小爬虫,分享下,不喜勿喷! #coding=utf-8 ''' Created on 2015-5-22@author: 悦文 '''import re i ...

  5. 【直播回放】60分钟讲解深度学习中的数据爬虫和标注

    大家好,欢迎来到我们的付费视频直播回放栏目,在这个专栏中我们会每一次针对某一个主题,做1-2个小时左右的直播,包含PPT讲解与答疑交流. 作者&编辑 | 言有三 本文主题与资源 主讲人:贺率欣 ...

  6. python简单的爬虫教程中召唤小海龟_Python练习,网络小爬虫(初级)

    标签: 最近还在看Python版的rcnn代码,附带练习Python编程写一个小的网络爬虫程序. 抓取网页的过程其实和读者平时使用IE浏览器浏览网页的道理是一样的.比如说你在浏览器的地址栏中输入   ...

  7. python反爬虫破解_python中绕过反爬虫的方法总结

    我们在登山的途中,有不同的路线可以到达终点.因为选择的路线不同,上山的难度也有区别.就像最近几天教大家获取数据的时候,断断续续的讲过header.地址ip等一些的方法.具体的爬取方法相信大家已经掌握住 ...

  8. python scrapy爬虫遇见301_在Pycharm中运行Scrapy爬虫项目的基本操作

    目标在Win7上建立一个Scrapy爬虫项目,以及对其进行基本操作.运行环境:电脑上已经安装了python(环境变量path已经设置好), 以及scrapy模块,IDE为Pycharm .操作如下: ...

  9. python网络爬虫的方法有几种_Python网络爬虫过程中5种网页去重方法简要介绍

    一般的,我们想抓取一个网站所有的URL,首先通过起始URL,之后通过网络爬虫提取出该网页中所有的URL链接,之后再对提取出来的每个URL进行爬取,提取出各个网页中的新一轮URL,以此类推.整体的感觉就 ...

最新文章

  1. python的cfg是什么模块_cfg4py:一个严肃的Python配置模块应有的风格-层级式、部署环境自适应、自动补全...
  2. VS 2008 mfc 智能应用程序 调用 C# webservice.(二)(gsoap+wince)
  3. Flex 容器基本概念
  4. 数据结构:严蔚敏、殷人昆快速排序规则不同的疑问
  5. 从关系数据库到Elasticsearch的索引数据– 1
  6. mysql sequence java_MySQL增加Sequence管理功能
  7. 少走弯路:Mac+python+opencv
  8. 平时有没有使用xml和json
  9. linux集群100道单选题面试试题系统工程师中级试题(4)
  10. truffle Migration是什么
  11. linux运行j2me,Linux下用Eclipse搭建J2me开发环境过程
  12. 论文笔记——CPN(Corner-Proposal-Network)Det
  13. 数组输出c语言getchar,C语言入门 — getchar
  14. 基于SSM实现个性化健康饮食推荐系统
  15. sublime text3简体中文版汉化教程
  16. 微软这个系统,90% 的人都没用过!
  17. 最新版校园招聘进大厂系列----------(1)阿里篇 -----未完待续
  18. 2022年圣诞节 | matlab实现炫酷的圣诞树
  19. PC - 电脑应该多久清洁一次?
  20. 淘宝、天猫API接口

热门文章

  1. 【Redis扩展篇(一)】过期策略
  2. IntelliJ IDEA中的神仙插件 写代码必备!
  3. 罗永浩的1.1亿,薇娅的卖火箭,蛋蛋的4.8亿,直播魔幻夜埋下了什么
  4. JL杰理蓝牙发射方案开发
  5. 普通人的2022春招总结(阿里、腾讯offer)
  6. 压缩png命令cmd_使用pngquant工具对PNG格式图片进行压缩
  7. 事件标记关联优化模型实现
  8. electron打开文件的几种实现方式
  9. 属性python_Python属性描述符(一)
  10. 毕业两年,洋洋洒洒千字文