佛性爬虫教程--入门教程

2023-12-17 10:10

本文主要是介绍佛性爬虫教程--入门教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.爬虫的过程分析

  当人类去访问一个网页时,是如何进行的?
  ①打开浏览器,输入要访问的网址,发起请求。
  ②等待服务器返回数据,通过浏览器加载网页。
  ③从网页中找到自己需要的数据(文本、图片、文件等等)。
  ④保存自己需要的数据。

  对于爬虫,也是类似的。它模仿人类请求网页的过程,但是又稍有不同。
  首先,对应于上面的①和②步骤,我们要利用python实现请求一个网页的功能。
  其次,对应于上面的③步骤,我们要利用python实现解析请求到的网页的功能。
  最后,对于上面的④步骤,我们要利用python实现保存数据的功能。
  因为是讲一个简单的爬虫嘛,所以一些其他的复杂操作这里就不说了。下面,针对上面几个功能,逐一进行分析。

2.如何用python请求一个网页

  作为一门拥有丰富类库的编程语言,利用python请求网页完全不在话下。这里推荐一个非常好用的第三方类库requests。

2.1 requests

2.1.1 安装方式

  打开终端或者cmd,在里面输入以下指令并回车

pip install requests

 一般不会出什么问题,如果下载太慢,是因为pip使用的源服务器在国外,可以设置pip使用国内镜像源,设置方法可以参考PyPI使用国内源。

2.1.2 测试是否安装成功

  在命令行中输入python,敲击回车,进入python交互环境。在里面输入以下代码并回车:

import requests

 如果不报错,就安装成功了,如下图:

 

2.2 使用requests请求网页

  打开pycharm,在里面输入以下代码:

#coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import requestsresp=requests.get('https://www.baidu.com') #请求百度首页
print resp #打印请求结果的状态码
print resp.content #打印请求到的网页源码

对上面的代码进行以下简单的分析:
  我是用的是python2.7,第1行到第4行,都是为了将字符编码设置为utf8
  第5行:引入requests包。
  第7行:使用requests类库,以get的方式请求网址https://www.baidu.com,并将服务器返回的结果封装成一个对象,用变量resp来接收它。
  第8行:一般可以根据状态码来判断是否请求成功,正常的状态码是200,异常状态码就很多了,比如404(找不到网页)、301(重定向)等。
  第9行:打印网页的源码。注意,只是源码。不像是浏览器,在获取到源码之后,还会进一步地取请求源码中引用的图片等信息,如果有JS,浏览器还会执行JS,对页面显示的内容进行修改。使用requests进行请求,我们能够直接获取到的,只有最初始的网页源码。也正是因为这样,不加载图片、不执行JS等等,爬虫请求的速度会非常快。
  代码很短吧?一行就完成了请求,可以,这很python
  现在,运行一下代码看看吧。

箭头指向的是状态码,可以看到,200,请求正常。
  被圈起来是网页的源码。

3.如何用python解析网页源码

  网页源码我们拿到了,接下来就是要解析了。python解析网页源码有很多种方法,比如BeautifulSoup、正则、pyquery、xpath等。这里我简单介绍一下。

3.1 网页源码解析器

3.1.1 BeautifulSoup

  这是我比较推荐的一款解析器,简单易用,容易理解。
  但是使用bs4还需要安装另一个类库lxml,用来代替bs4默认的解析器。之所以这样做,是因为默认的那个实在太慢了,换用了lxml后,可以大幅度提升解析速度。

3.1.1.1 安装

  命令行中输入以下指令并回车,安装bs4:

pip install beautifulsoup4

3.1.1.2 测试是否安装成功

  进入python交互环境,引用bs4和lxml类库,不报错即安装成功。

3.1.2 正则

  这个不用安装,标准库里带的就有。
  正则的优点:①速度快 ②能够提取有些解析器提取不到的数据
  正则的缺点:①不够直观,很难从面向对象的角度来考虑数据的提取 ②你得会写正则表达式
  教程就不放了,善用百度嘛。正则一般用来满足特殊需求、以及提取其他解析器提取不到的数据,正常情况下我会用bs4,bs4无法满足就用正则。
  当然了,如果你喜欢,全部用正则解析也是没问题的,你喜欢就好= =。

3.1.3 pyquery

  这个解析器的语法和jQuery很相似,所以写过jQuery的同学用起来可能比较容易上手。国内有个dalao写的爬虫框架pyspider用的就是这个解析器。
  如果没用过jQuery,那就在bs4和pyquery两个里面选一个学吧,一般情况下会一个就够了。

3.1.3.1 安装

pip install pyquery

3.1.3.2 测试

import pyquery

3.2 使用BeautifulSoup+lxml解析网页源码

  接着上面的代码来,我们使用BeautifulSoup+lxml解析请求到的网页源码。
  从百度的首页,可以通过点击跳转到很多其他页面,比如说下面圈起来的,点击都会跳转到新的页面:

 现在,我们想要用python获得从百度能够跳转到的页面的链接,该怎么做?
  代码很简单,接着上面的写:

#coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import requests
from bs4 import BeautifulSoupresp=requests.get('https://www.baidu.com') #请求百度首页
print resp #打印请求结果的状态码
print resp.content #打印请求到的网页源码bsobj=BeautifulSoup(resp.content,'lxml') #将网页源码构造成BeautifulSoup对象,方便操作
a_list=bsobj.find_all('a') #获取网页中的所有a标签对象
for a in a_list:print a.get('href') #打印a标签对象的href属性,即这个对象指向的链接地址

 首先,第6行,引入我们解析时要使用的类库,beautifulsoup4。
  第12行,将网页的源码转化成了BeautifulSoup的对象,这样我们可以向操作DOM模型类似地去操作它。
  第13行,从这个BeautifulSoup对象中,获取所有的a标签对象(大家应该知道a标签对象是什么吧,网页中的链接绝大多数都是a对象实现的),将他们组成一个列表,也就是a_list。
  第14、15行,遍历这个列表,对于列表中的每一个a标签对象,获取它的属性href的值(href属性记录一个a标签指向的链接地址)。获取一个标签对象的属性,可以使用get(’xx’)方法,比如a_tag是一个a标签对象,获取它的href的值,就是a_tag.get('href'),获取它的class信息可以用a_tag.get('class'),这将返回一个修饰该标签的class列表。
  运行一下,可以看到,打印出了很多链接。

 

 这是个简单的例子,介绍如何开始一个简单爬虫,不涉及复杂操作(复杂的后面会上小项目,会介绍)。关于beautifulsoup的详细用法,请自行百度。

3.3 简单的保存数据的方法

  保存数据的方法大概可以分为几类:保存文本、保存二进制文件(包括图片)、保存到数据库。保存二进制文件和保存到数据库后面会具体说,这里简单讲一下怎么保存到文本。
  python里面操作文本相当的简单。现在,我将刚才提取出来的链接保存到一个名称为url.txt的文本里面去,将上面的代码稍作修改。

#coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import requests
from bs4 import BeautifulSoupresp=requests.get('https://www.baidu.com') #请求百度首页
print resp #打印请求结果的状态码
print resp.content #打印请求到的网页源码bsobj=BeautifulSoup(resp.content,'lxml') #将网页源码构造成BeautifulSoup对象,方便操作
a_list=bsobj.find_all('a') #获取网页中的所有a标签对象
text='' # 创建一个空字符串
for a in a_list:href=a.get('href') #获取a标签对象的href属性,即这个对象指向的链接地址text+=href+'\n' #加入到字符串中,并换行
with open('url.txt','w') as f: #在当前路径下,以写的方式打开一个名为'url.txt',如果不存在则创建f.write(text) #将text里的数据写入到文本中

 代码中注释写得很清楚了,就不多做解释了。值得一提的是,使用with…as…来打开文件,在操作完成后,会自动关闭文件,不用担心忘记关闭文件了,超级好用啊!
  运行一下代码,可以发现,当前路径下多了个名为url.txt的文件。

  打开后,能够看到我们刚才提取出来的url。

 未完待续。。。

 

 

 

这篇关于佛性爬虫教程--入门教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/504003

相关文章

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

电脑提示d3dx11_43.dll缺失怎么办? DLL文件丢失的多种修复教程

《电脑提示d3dx11_43.dll缺失怎么办?DLL文件丢失的多种修复教程》在使用电脑玩游戏或运行某些图形处理软件时,有时会遇到系统提示“d3dx11_43.dll缺失”的错误,下面我们就来分享超... 在计算机使用过程中,我们可能会遇到一些错误提示,其中之一就是缺失某个dll文件。其中,d3dx11_4

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实