首页 / 数据采集与处理 / 第2章 网络爬虫基础(Requests/BeautifulSoup)

第2章 网络爬虫基础(Requests/BeautifulSoup)

理论6课时 + 上机6课时 | 难度:核心重点

2.1 HTTP协议基础(通俗版)

HTTP就是浏览器和网站服务器之间"对话"的规则。你输入网址回车,浏览器就会发送一个请求(Request)给服务器,服务器收到后返回一个响应(Response),里面包含网页内容。 常见的请求方法: GET:向服务器"要"数据,比如打开一个网页。 POST:向服务器"提交"数据,比如登录时提交用户名密码。

2.2 安装Requests库

Requests是Python里用来发送HTTP请求的第三方库,使用非常简单。

# 打开命令提示符(CMD)或终端,输入: pip install requests # 验证安装成功 python -c "import requests; print(requests.__version__)"

2.3 使用Requests发送GET请求

import requests # 发送GET请求获取网页 url = "https://www.example.com" response = requests.get(url) # 查看响应状态码:200表示成功 print(response.status_code) # 查看网页内容(文本形式) print(response.text) # 设置编码(防止中文乱码) response.encoding = 'utf-8'

2.4 安装BeautifulSoup4

# 安装BeautifulSoup4和解析器 pip install beautifulsoup4 lxml # 验证安装 python -c "from bs4 import BeautifulSoup; print('安装成功')"

2.5 使用BeautifulSoup解析HTML

from bs4 import BeautifulSoup import requests url = "https://www.example.com" response = requests.get(url) response.encoding = 'utf-8' # 创建BeautifulSoup对象 soup = BeautifulSoup(response.text, 'lxml') # 获取网页标题 title = soup.find('title').text print("标题:", title) # 获取所有段落文字 paragraphs = soup.find_all('p') for p in paragraphs: print(p.text)

2.6 CSS选择器定位元素

CSS选择器是用来"选中"网页中特定元素的方法,就像你用手指指着说"我要这个"。

# 通过标签名查找 soup.find('h1') # 找第一个h1标签 soup.find_all('a') # 找所有a标签(链接) # 通过class查找 soup.find('div', class_='content') # 通过id查找 soup.find('div', id='main') # 使用CSS选择器(更灵活) soup.select('.title') # 找class为title的元素 soup.select('#header') # 找id为header的元素 soup.select('div p') # 找div里面的p标签

2.7 处理请求异常

import requests from requests.exceptions import RequestException url = 'https://www.example.com' try: response = requests.get(url, timeout=10) response.raise_for_status() # 如果状态码不是200,会抛出异常 print('请求成功') except RequestException as e: print(f'请求出错:{e}')

2.8 保存数据到文件

# 保存为文本文件 with open('data.txt', 'w', encoding='utf-8') as f: f.write(response.text) # 保存为CSV文件(需要import csv) import csv with open('data.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow(['标题', '链接']) # 写入表头 for item in data_list: writer.writerow([item['title'], item['link']])

自学拓展素材

  • 免费教程:Requests官方文档(requests.readthedocs.io,有中文社区翻译版)
  • 免费教程:BeautifulSoup官方文档(www.crummy.com/software/BeautifulSoup/bs4/doc/)
  • 视频教程:B站搜索"Python爬虫入门",推荐播放量高的实战系列
  • 实训数据集:以各大新闻网站、电商网站为练习目标(注意遵守robots协议)
  • 推荐练习网站:httpbin.org(测试HTTP请求的各种接口)

自学自检小问题

  1. GET和POST请求有什么区别?什么时候用GET,什么时候用POST?
  2. 状态码200、404、500分别代表什么意思?
  3. 写出一段代码:用Requests获取百度首页,并打印出网页标题。
  4. BeautifulSoup的find()和find_all()有什么区别?
  5. 如果网页出现中文乱码,应该怎么解决?
  6. 如何用CSS选择器选中class为"item"的所有div元素?
基础巩固层练习
0/7
第1题 选择题
HTTP状态码200表示什么意思?
服务器内部错误
请求成功
页面未找到
请求被禁止
答案解析
200表示请求已成功处理。A是500,C是404,D是403。
第2题 选择题
以下哪个Python库用于解析HTML文档?
requests
pandas
BeautifulSoup
numpy
答案解析
BeautifulSoup专门用于解析HTML/XML。requests用于发送HTTP请求,pandas用于数据处理,numpy用于数值计算。
第3题 选择题
BeautifulSoup中,查找所有匹配元素的方法是?
find()
find_all()
select_one()
get()
答案解析
find_all()返回所有匹配元素的列表。find()只返回第一个匹配元素。
第4题 选择题
requests.get()返回的响应对象中,获取文本内容应使用?
response.content
response.text
response.json()
response.headers
答案解析
response.text返回响应的文本内容(字符串形式)。response.content返回字节形式,response.json()返回解析后的JSON对象。
第5题 判断题
CSS选择器中,#header表示选中class为header的元素。
正确
错误
答案解析
#header表示选中id为header的元素。.header才表示选中class为header的元素。
第6题 判断题
GET请求可以携带请求体(body)发送数据。
正确
错误
答案解析
GET请求的数据放在URL参数中,POST请求才放在请求体中。
第7题 填空题
设置请求编码防止中文乱码的代码是 response.encoding = ______
答案解析
将响应编码设置为utf-8可以正确显示中文。
0/0