1. Python 如何写爬虫
- 定义:Python 爬虫是借助 Python 语言编写程序,模拟浏览器行为向目标网站发送 HTTP 请求,获取网页内容,再通过解析工具提取所需数据的程序。其本质是自动化的数据采集过程。
- 要点:
- 发送请求:利用
requests
库发送 HTTP 请求,如 GET、POST 等,获取网页 HTML 内容。 - 解析数据:运用
BeautifulSoup
、lxml
等库解析 HTML,提取所需信息。 - 处理反爬虫:设置请求头、使用代理 IP、控制请求频率等绕过网站反爬虫机制。
- 数据存储:将提取的数据存储到文件(如 CSV、JSON)或数据库(如 MySQL、MongoDB)中。
- 发送请求:利用
- 应用:在信息收集、舆情监测、电商价格监控、搜索引擎数据抓取等场景广泛应用。
- Python 代码示例:
python
import requests
from bs4 import BeautifulSoupurl = 'https://www.example.com'
headers = {'User - Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
links = soup.find_all('a')
for link in links:print(link.get('href'))
2. Python 全局锁
- 定义:Python 全局解释器锁(Global Interpreter Lock,GIL)是 Python 解释器中的一个互斥锁,确保同一时刻只有一个线程在解释器中执行 Python 字节码,以此保障 Python 内存管理的线程安全。
- 要点:
- 仅影响 CPU 密集型多线程程序,对 I/O 密集型程序影响不大。
- 多进程可绕过 GIL 限制,因每个进程有独立的解释器和 GIL。
- 应用:在编写 Python 多线程程序时,需考虑 GIL 影响。CPU 密集型任务适合用多进程,I/O 密集型任务多线程仍可提升效率。
- Python 代码示例(对比多线程和多进程):
python
import threading
import multiprocessing# CPU 密集型任务
def cpu_intensive_task():result = 0for i in range(10**7):result += ireturn result# 多线程
threads = []
for _ in range(4):t = threading.Thread(target=cpu_intensive_task)threads.append(t)t.start()
for t in threads:t.join()# 多进程
processes = []
for _ in range(4):p = multiprocessing.Process(target=cpu_intensive_task)processes.append(p)p.start()
for p in processes:p.join()
3. Python 爬虫分为哪几种,分别是什么
- 定义:
- 通用爬虫:能抓取整个互联网网页的爬虫程序,通常由搜索引擎公司使用,按特定规则遍历网页并存储内容,供后续索引和搜索。
- 聚焦爬虫:只抓取与特定主题相关网页的爬虫,专注于获取特定领域的信息。
- 增量式爬虫:仅抓取网页中发生变化部分的爬虫,避免重复抓取相同内容,提高爬取效率。
- 深层爬虫:深入网页内部链接,抓取更深入层次内容的爬虫。
- 要点:不同类型爬虫根据功能和应用场景区分,