Python网页数据爬虫(一)
好久没更博客了。这几个月在帮忙做横向,第一次接触爬虫,写了几个烂烂的代码,涉及到保密内容无法公开,这里重点讲方法。最近几天找时间梳理了一下哈哈哈哈。。。。
首先要介绍一下requests库和beautifulsoup库,这两个是我用的比较多的,也是比较简单的,上手很容易。依葫芦画瓢,懂?
Requests库的简单介绍
requests库最基本的用法是发送一个GET请求来获取网页内容。代码如下:
import requests
url = 'https://www.baidu.com/' #输入你想获取的网页网址
response = requests.get(url) #get请求来获取网页内容
print(response.text) #获取网页的文本信息
这个简单的代码返回的部分结果如下图所示:
由上面这个截图可以知道:response.text
是返回的 HTML 内容,它是一个字符串,包含网页的 HTML 代码。
对了,除了get请求还有post请求,学过计网的对这个应该有点了解。有的时候你可能还需要请求状态,这里涉及到一个状态码,每个HTTP请求都会返回状态码,表示请求是否成功。可以通过reponse.status_code来查看:
print(response.status_code) # 200 表示成功
当然了,除了200,还有其他状态码,分别表示了不同的涵义,这里就不再赘述,不是本篇文章的重点。
有的时候我们会为了让自己的爬虫更真实,会模拟请求头,来对抗反爬虫。如何获得网页的请求头呢?你可以通过response.headers来获取响应头的信息:
print(response.headers)
下面是我获取到的内容:
{'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html', 'Date': 'Thu, 02 Jan 2025 12:46:06 GMT', 'Last-Modified': 'Mon, 23 Jan 2017 13:23:46 GMT', 'Pragma': 'no-cache', 'Server': 'bfe/1.0.8.18', 'Set-Cookie': 'BDORZ=27315; max-age=86400; domain=.baidu.com; path=/', 'Transfer-Encoding': 'chunked'}
需要模仿请求头的时候照着写就行了,大部分字段的值是一模一样的,需要值得注意的是少部分字段需要经常更新,比如会遇到:Authorization,Cookie,Referer等
不是所有的网页返回的都是HTML或者XML,有时候也会是json格式的,下个博客再讲啦,不喜欢看非常长的博客,觉得很有负担哈哈哈哈
Beautifulsoup库的简单介绍
BeautifulSoup 需要配合 requests
或其他库来发送 HTTP 请求,获取网页内容。基本的网页抓取: 使用 requests
获取网页内容,再使用 BeautifulSoup 解析和提取数据,解析网页和提取数据有时候挺麻烦的,眼睛都快看瞎,当然习惯就好啦。
import requests
from bs4 import BeautifulSoup
url = 'https://www.baidu.com/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser') # html.parser是python内置的解析器,不知道是啥的这行代码记住就sing啦
print(soup.prettify()) # 输出格式化后的HTML
输出的部分结果如下图:
我个人喜欢直接在网页F12之后分析或者将输出结果复制在编辑器里面分析,会方便看一些,有些元素和组件挺复杂的,容易看错。
怎么定位元素呢?有哪些元素是你想获取的数据?定位标签:使用 find()
和 find_all()
方法来提取特定的 HTML 元素。
使用find()获取单个标签
find()
方法返回第一个符合条件的标签。如果要获取第一个 <a>
标签,可以使用:
使用 find_all()
获取所有符合条件的标签
find_all()
方法返回所有符合条件的标签,返回结果是一个列表。
使用属性筛选标签
通过 id
筛选
如果你需要筛选具有特定 id
的标签,可以使用 id
属性:
使用 select()
根据 CSS 选择器查找标签
select()
方法允许你使用更复杂的选择器:
提取标签中的文本
.text
获取标签内部的文本内容:
在写爬虫的时候需要会自己分析网页的html内容,找到自己想要的内容再输出就行了,或者将对应的数据字段保存到数据库的表中。但实际上写好一个爬虫并没有这么简单,你可能会遇到时间超限,有些标签元素突然访问不到了,或者操作次数限制问题,,,有的时候随着网页的更新,爬虫还会失去作用,所以写好一个爬虫也可能非常难,这些都需要经验的积累。。。
作者:Jodieorsesplus