Python教程

网络爬虫-01基础-Python实现

本文主要是介绍网络爬虫-01基础-Python实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  这篇文章基于之前爬取数据相关任务,总结了爬虫的基础内容。首先介绍爬虫的基本步骤,然后附加了一个示例。

1、爬虫的基本步骤

1.1 发送网络请求并获取响应的内容

  发送网络请求实际上相当于我们打开浏览器,输入目标网址访问这个网页的过程;网页服务器返回的数据就是请求对应的响应内容 。

  在爬虫的时候首先向我们想要爬取数据的网站发送一个请求,然后获取网站返回的响应内容,这些响应内容就包含了我们想要爬取的数据。

1.2 解析响应的内容

  在爬虫的时候,我们发送请求之后获取的响应内容一般是HTML、JSON等格式的数据,因此需要对这些数据进行解析,从中提取出我们希望获取的信息。以知乎网站为例,我们在浏览器输入 https://zhuanlan.zhihu.com/p/262230083 ,然后单击右键选择 检查 ,可以看到页面的HTML结构,按照步骤1-4可以定位页面某一元素在HTML结构中的位置,如下图所示:
在这里插入图片描述

1.3 保存解析的数据

  解析完成数据之后,就可以采用合适的方法对数据进行保存,可以存储为本地的文本、图片等,也可以存储到数据库中。

2、Python爬虫示例

  应用Python进行网络爬虫的时候,我们使用了 requests、BeautifulSoup、pandas 3个模块,分别用于发送网络请求获取响应内容、解析响应内容、存储解析之后的数据。代码如下:

import requests
from bs4 import BeautifulSoup
import pandas as pd

2.1 发送网络请求并获取响应的内容

  第一步是发送请求并获取响应的内容,代码如下:

headers = {'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
html = requests.get('https://zhuanlan.zhihu.com/p/262230083', headers=headers).content.decode()

  第一行代码首先配置了一下User-Agent,User-Agent中文名为用户代理,是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、等信息。网站可以通判断 User-Agent 来给不同的操作系统、不同的浏览器发送不同的页面。

  对于爬虫来说,User-Agent就是标明身份的第一层标识,爬虫程序中不加 User-Agent 的话,服务器会识别出爬虫程序,导致我们获取不到需要的响应内容,因此程序中必须设置 User-Agent 。

  可以在浏览器的地址栏中输入 about:version ,以获取 User-Agent, 如下图所示:
在这里插入图片描述

  第二行代码实现了发送请求并获取响应内容的过程,首先使用 .get 方法获取了网页,得到一个Response对象,然后使用 .content 这个属性来显示bytes型网页的源代码,最后使用 .decode 方法将bytes型的网页源代码解码为字符串型的源代码。

2.2 解析响应的内容

  第二步是对网页响应的HTML进行解析,HTML解析的时候,一般由外层向内层逐渐深入。在这个爬虫示例里面,我们的目标是提取正文里面的文本。

  使用上文的方法在浏览器里对正文文本进行定位,找到文本对应在HTML结构里的位置。我们发现正文全部在 class=“RichText ztext Post-RichText css-hnrfcf” 的 div 标签里面,然后每一段文本都包含在 div 标签下一级的 p 标签里面。

  分析完这些之后,我们就可以用程序对文本进行提取了。代码如下:

soup = BeautifulSoup(html, 'html.parser')
info = soup.find(class_ = 'RichText ztext Post-RichText css-hnrfcf')
all_content = info.find_all('p')	#这里返回的是一个列表

# print(all_content[0].string) 		#可以打印解析的第一行文本

  第一行代码生成一个 BeautifulSoup 对象,传入两个参数,第一个参数是我们上文获取的响应内容,是一个HTML;第二个是解析的方式,这里是 html.parser ,用来解析HTML。

  第二行代码得到 find() 方法返回的 BeautifulSoup Tag 对象,包含了 class=“RichText ztext Post-RichText css-hnrfcf” 的 div 标签里面的全部内容。

  第三行代码基于上一行代码的结果,获取了每个 p 标签里面的信息,这些信息包含了我们需要提取的文本内容。

  注意:这里分别用到了 find() 方法和 find_all() 方法。find() 与 find_all() 的不同点如下。
  · find_all()返回的是BeautifulSoup Tag对象组成的列表,如果没有找到任何满足要求的标签,就会返回空列表。
  · find()返回的是一个BeautifulSoup Tag对象,如果有多个符合条件的HTML标签,则返回第1个对象,如果找不到就会返回None。

2.3 保存解析的数据

  基于上文得到的 all_content 列表,我们可以提取出这个列表里面每个元素包含的文本,然后保存到本地Excel文件。代码如下:

res = []
for p in all_content:
    res.append(p.string)
    
df_res = pd.DataFrame(res)
df_res.to_excel('df_res.xlsx')

  这里首先用一个名为 res 的列表存储解析出的字符,然后将列表转换成 DataFrame 对象,并存储到本地 Excel 。

3 总结

  以上就是爬虫的基本步骤和一个基础示例,可以在这个示例上进行扩展得到复杂的爬虫程序。网络爬虫还涉及很多其他的问题,比如:如何使用代理IP反爬虫、如何绕过登录和验证码、如何实现并行提高爬虫速度等。后续有时间会继续整理出来进行分享。

  参考链接:https://blog.csdn.net/weixin_42830697/category_9410339.html

这篇关于网络爬虫-01基础-Python实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!