python爬虫基础

python爬虫基础

前言

Python爬虫是一种通过编程自动化地获取互联网上的信息的技术。其原理可以分为以下几个步骤:

  1. 发送HTTP请求: 爬虫首先会通过HTTP或HTTPS协议向目标网站发送请求。这个请求包含了爬虫想要获取的信息,可以是网页的HTML内容、图片、视频等。
  2. 接收响应: 目标网站接收到请求后,会返回一个HTTP响应。这个响应包含了请求的数据,状态码、头部信息等。爬虫需要解析这个响应来获取所需的信息。
  3. 解析HTML: 如果爬虫的目标是获取网页上的数据,它需要解析HTML文档。HTML是一种标记语言,包含了网页的结构和内容。爬虫可以使用解析库(如BeautifulSoup、lxml)来从HTML中提取所需的数据。
  4. 提取数据: 爬虫通过解析HTML文档,可以从中提取出所需的数据,例如链接、文本、图片地址等。提取数据的方式通常是使用选择器(Selector),它是一种用于定位HTML元素的表达式。
  5. 存储数据: 爬虫获取到的数据可以被存储到本地文件或数据库中,以备后续使用。常见的数据存储格式包括文本文件、JSON、CSV等。
  6. 处理动态页面: 一些网站使用JavaScript来动态加载内容,这就需要爬虫能够执行JavaScript代码,或者使用带有JavaScript渲染功能的工具(如Selenium、Puppeteer)来获取完整的页面内容。

1、python相关库(BeautifulSoup)

今天主要介绍一下BeautifulSoup模块

BeautifulSoup是一个用于从HTML或XML文档中提取数据的Python库。它的主要作用是解析复杂的HTML或XML文档,并提供了一种简单的方式来浏览文档树、搜索特定的标签、提取数据等。BeautifulSoup的设计目标是让数据提取变得容易、直观,并且具有Pythonic的风格。

2、BeautifulSoup模块的安装

安装命令

pip install bs4

我这里是安装过了,第一次安装会出现suessful

3、BeautifulSoup的使用

3.1 简单的使用(以百度为例)

python 复制代码
# coding=utf-8
import requests  # 导入请求模块
from bs4 import BeautifulSoup  # 
# from bs4 import BeautifulSoup 这样导入的目的是从 bs4(Beautiful Soup 4)库中引入 BeautifulSoup 类。这样导入的好处是在代码中使用 BeautifulSoup 类时不需要每次都写出完整的模块路径,简化了代码,提高了可读性。

# 设置要爬取的网站
url = "https://www.baidu.com/"
heder = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}

# 爬取内容
res = requests.get(url, headers=heder)  # 这里是去请求网页的内容
# 获取内容
content = res.text  # 这里是让爬取的内容以文本的形式打开,同时保存到变量

# 初始化Beatifulsoup
soup = BeautifulSoup(content, 'html.parser')
# 获取标题标签
print(soup.title)
# 如果想要直接获取标题的内容
# print(soup.title.string)

注意:因为百度需要添加请求头才能获取返回的内容,故此处定义了一个heder

请求头可以按以下方式获取

运行结果

3.2 soup.tagName的使用

在BeautifulSoup中,soup.tagName 的语法用于访问解析后的HTML文档中特定HTML标签的第一个出现实例。在这里,soup 是BeautifulSoup对象的引用,而tagName是你想要访问的HTML标签的名称。

它会返回第一个你指定的html标签的内容

这里可以看到百度的第一个a标签是百度首页的

使用soup.tagName

python 复制代码
# coding=utf-8
import requests
from bs4 import BeautifulSoup

# 设置要爬取的网站
url = "https://www.baidu.com/"
heder = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}

# 爬取内容
res = requests.get(url, headers=heder)
# 获取内容
content = res.text  # 这里是让爬取的内容以文本的形式打开,同时保存到变量

# 初始化Beatifulsoup
soup = BeautifulSoup(content, 'html.parser')
# 获取<a></a>标签第一次出现的地方
# print(soup.tagName)
print(soup.a)

运行结果

3.3 soup.find

soup.find() 是 BeautifulSoup 中用于查找单个标签的方法。它用于按照指定的条件查找文档中的第一个匹配的标签,并返回这个标签的 BeautifulSoup 对象。

查找标签的功能与soup.tagName是一样的,不同的是soup.find拥有丰富的参数,所以可以通过标签的class属性,或者是id属性来查找特定的标签

相关参数

  • name: 要查找的标签名称,可以是字符串、正则表达式、函数等。
  • attrs: 标签的属性,可以用字典形式表示。
  • recursive: 是否递归查找,默认为 True。
  • string: 标签中的文本内容。
  • kwargs: 其他特定标签属性的关键字参数。

下面演示通过attrs查找

python 复制代码
# coding=utf-8
import requests
from bs4 import BeautifulSoup

# 设置要爬取的网站
url = "https://www.baidu.com/"
heder = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}

# 爬取内容
res = requests.get(url, headers=heder)
# 获取内容
content = res.text  # 这里是让爬取的内容以文本的形式打开,同时保存到变量

# 初始化Beatifulsoup
soup = BeautifulSoup(content, 'html.parser')
# 获取<a></a>标签第一次出现的地方
print(soup.find('input', attrs={'id': 'su'}))

运行结果

3.4 soup.find_all

该方法返回的是指定标签下面的所有内容,而且是列表的形式;传入的方式是多种多样的。

(1)传入单个标签

python 复制代码
# coding=utf-8
import requests
from bs4 import BeautifulSoup

# 设置要爬取的网站
url = "https://www.baidu.com/"
heder = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}

# 爬取内容
res = requests.get(url, headers=heder)
# 获取内容
content = res.text  # 这里是让爬取的内容以文本的形式打开,同时保存到变量

# 初始化Beatifulsoup
soup = BeautifulSoup(content, 'html.parser')
# 获取所有的a标签并以列表形式返回
list_a = soup.find_all('a')
# 输出显示获取到的a标签列表
for i in list_a:
    print(i)

运行结果

(2)传入多个标签

# coding=utf-8
import requests
from bs4 import BeautifulSoup

# 设置要爬取的网站
url = "https://www.baidu.com/"
heder = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}

# 爬取内容
res = requests.get(url, headers=heder)
# 获取内容
content = res.text  # 这里是让爬取的内容以文本的形式打开,同时保存到变量

# 初始化Beatifulsoup
soup = BeautifulSoup(content, 'html.parser')
# 获取所有的a标签和input标签并以列表形式返回
list_a = soup.find_all('a', 'input')
# 输出显示获取到的a标签列表
for i in list_a:
    print(i)

(3)传入正则表达式

万金油表达式

# 找所有的xxx标签: 属性xxx满足对应正则表达式
soup.find_all(name='xxx',attrs={'xxx':re.compile('正则表达式')}
相关推荐
binishuaio6 分钟前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
小奥超人7 分钟前
PPT文件设置了修改权限,如何取消权?
windows·经验分享·microsoft·ppt·办公技巧
zz.YE8 分钟前
【Java SE】StringBuffer
java·开发语言
就是有点傻12 分钟前
WPF中的依赖属性
开发语言·wpf
洋24021 分钟前
C语言常用标准库函数
c语言·开发语言
进击的六角龙23 分钟前
Python中处理Excel的基本概念(如工作簿、工作表等)
开发语言·python·excel
wrx繁星点点24 分钟前
状态模式(State Pattern)详解
java·开发语言·ui·设计模式·状态模式
NoneCoder41 分钟前
Java企业级开发系列(1)
java·开发语言·spring·团队开发·开发
苏三有春41 分钟前
PyQt5实战——UTF-8编码器功能的实现(六)
开发语言·qt
一只爱好编程的程序猿43 分钟前
Java后台生成指定路径下创建指定名称的文件
java·python·数据下载