文章三:Python网络编程实战:爬虫技术入门与实践
一、简介
本篇文章将通过介绍Python爬虫技术,帮助读者理解网络数据抓取的基本原理和方法。我们将分为以下几个部分来展开本文的内容:
- 爬虫技术基础概念
- 请求与响应
- HTML解析与数据提取
- 实战:爬取简书网站首页文章信息
- 存储数据
- 测试与优化
- 总结及拓展
二、爬虫技术基础概念
- 爬虫:自动获取网络数据的程序。
- Web页面结构:HTML、CSS、JavaScript等。
- HTTP请求:客户端向服务器请求数据的方式。
- HTTP响应:服务器返回给客户端的数据。
三、请求与响应
- 使用Python的
requests
库发送HTTP请求。import requests url = "https://www.example.com" response = requests.get(url)
- 获取响应内容
-
html_content = response.text
四、HTML解析与数据提取
- 使用
BeautifulSoup
库解析HTML内容。from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, "html.parser")
- 使用CSS选择器或其他方法提取数据。
title = soup.title.string
五、实战:爬取简书网站首页文章信息
- 发送请求,获取简书网站首页HTML内容。
import requests from bs4 import BeautifulSoup url = "https://www.jianshu.com" response = requests.get(url) html_content = response.text
六、存储数据
- 将数据存储为JSON格式。
import json with open("jianshu_articles.json", "w", encoding="utf-8") as f: json.dump(article_info_list, f, ensure_ascii=False, indent=4)
七、测试与优化
- 遇到反爬虫策略时,可以使用
User-Agent
伪装成浏览器。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)
- 使用
time.sleep()
函数控制请求频率。import time time.sleep(1
3.错误处理与异常捕获。
try: response = requests.get(url, headers=headers, timeout=5) response.raise_for_status() except requests.exceptions.RequestException as e: print(f"Error: {e}")
网站爬虫完整代码:
import requests
from bs4 import BeautifulSoup
import json
import time
def fetch_jianshu_articles():
url = "https://www.jianshu.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"}
try:
response = requests.get(url, headers=headers, timeout=5)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
return
html_content = response.text
soup = BeautifulSoup(html_content, "html.parser")
articles = soup.find_all("div", class_="content")
article_info_list = []
for article in articles:
title = article.h2.text.strip()
author = article.find("span", class_="name").text.strip()
link = url + article.h2.a["href"]
article_info = {"title": title, "author": author, "link": link}
article_info_list.append(article_info)
return article_info_list
def save_to_json(article_info_list, filename):
with open(filename, "w", encoding="utf-8") as f:
json.dump(article_info_list, f, ensure_ascii=False, indent=4)
if __name__ == "__main__":
article_info_list = fetch_jianshu_articles()
if article_info_list:
save_to_json(article_info_list, "jianshu_articles.json")
print("Jianshu articles saved to 'jianshu_articles.json'.")
else:
print("Failed to fetch Jianshu articles.")
八、总结及拓展
本文通过介绍Python爬虫技术,帮助读者理解网络数据抓取的基本原理和方法。掌握爬虫技术是成为一名全栈工程师的重要技能之一,同时也为数据分析、大数据处理等领域奠定基础。在实际应用中,还可以尝试抓取更复杂的网站、使用代理IP、构建分布式爬虫等方法,提高爬虫的效率和稳定性。
九、补充
在文章三中,我们已经介绍了如何使用Python进行网络爬虫的基本操作。为了更好地理解这个实战项目,我们需要了解一些基础概念和原理,这将有助于掌握Python的网络编程和爬虫技术。以下是一些基本的网络爬虫概念:
-
HTTP协议:超文本传输协议(HTTP)是一种用于传输超媒体文档(如 HTML)的应用层协议。HTTP协议被用于从Web服务器传输或发布到Web浏览器或其他客户端的数据。
-
HTML、CSS 和 JavaScript:HTML 是用来描述网页的一种语言。CSS 是用来表现 HTML 结构的样式。JavaScript 是网页编程的一种脚本语言,主要用于实现网页上的动态效果和与用户的交互。
-
DOM:文档对象模型(DOM)是一种跨平台的编程接口,用于处理 HTML 和 XML 文档。DOM将文档视为树形结构,其中每个节点代表一个部分(如元素、属性或文本)。
-
URL:统一资源定位符(URL)是用于指定互联网资源位置的一种字符串。
-
请求头(Request Headers):在HTTP请求中,请求头包含了关于客户端的环境、浏览器等信息。常见的请求头字段有:User-Agent、Accept、Referer 等。
-
响应头(Response Headers):在HTTP响应中,响应头包含了关于服务器的信息、响应状态码等信息。常见的响应头字段有:Content-Type、Content-Length、Server 等。
-
网络爬虫策略:有些网站会采取一些策略来阻止爬虫抓取数据,如:封禁IP、限制访问速度、使用 JavaScript 动态加载数据等。在实际应用中,我们需要根据这些策略采取相应的应对措施,如:使用代理IP、限制爬虫抓取速度、使用浏览器模拟库(如 Selenium)等。
了解这些基础概念和原理将帮助您更好地理解网络爬虫的实现过程和技巧。