Python爬虫基本原理及案例
Python爬虫是一种利用Python语言编写的程序,可以自动从互联网上获取和处理数据的工具。Python爬虫的基本原理是通过发送HTTP请求,获取网页的源代码,然后利用解析库或正则表达式等方法,提取出所需的数据。Python爬虫的优点是简单易用,功能强大,支持多种解析库和网络框架,可以应对各种复杂的网页结构和反爬虫策略。
下面我们来看两个简单的Python爬虫案例,分别是爬取豆瓣电影排行榜和百度百科词条。
案例一:爬取豆瓣电影排行榜
豆瓣电影排行榜是一个展示最受欢迎电影的网页,我们可以通过Python爬虫来获取排行榜上的电影名称,评分,评价人数等信息。首先,我们需要导入requests库和BeautifulSoup库,分别用于发送HTTP请求和解析HTML代码。然后,我们需要定义一个函数get_html(url),用于获取指定URL的网页源代码。接着,我们需要定义一个函数parse_html(html),用于从网页源代码中提取出电影信息,并保存到一个列表中。最后,我们需要定义一个函数main(),用于调用前面的函数,并打印出结果。代码如下:
python
import requests
from bs4 import BeautifulSoup
def get_html(url):
# 发送HTTP请求,获取网页源代码
response = requests.get(url)
# 判断响应状态码是否为200
if response.status_code == 200:
# 返回网页源代码的文本内容
return response.text
else:
# 抛出异常
raise Exception('请求失败')
def parse_html(html):
# 创建BeautifulSoup对象,指定解析器为lxml
soup = BeautifulSoup(html, 'lxml')
# 获取所有class为item的div标签,这些标签包含了电影信息
items = soup.find_all('div', class_='item')
# 创建一个空列表,用于存储电影信息
movies = []
# 遍历每个item标签
for item in items:
# 获取电影名称,去除空白字符
title = item.find('span', class_='title').text.strip()
# 获取电影评分,转换为浮点数
rating = float(item.find('span', class_='rating_num').text)
# 获取电影评价人数,去除人字,转换为整数
comment = int(item.find('span', class_='pl').text.strip('人'))
# 将电影信息以字典的形式添加到列表中
movies.append({'title': title, 'rating': rating, 'comment': comment})
# 返回电影信息列表
return movies
def main():
# 定义豆瓣电影排行榜的URL
url = 'https://movie.douban.com/top250'
# 调用get_html函数,获取网页源代码
html = get_html(url)
# 调用parse_html函数,提取电影信息
movies = parse_html(html)
# 遍历电影信息列表,打印结果
for movie in movies:
print(movie['title'], movie['rating'], movie['comment'])
# 执行main函数
if __name__ == '__main__':
main()
运行结果如下:
肖申克的救赎 9.7 2362546
霸王别姬 9.6 1770620
这个杀手不太冷 9.4 2122268
阿甘正传 9.5 1900600
美丽人生 9.5 1027361
...
案例二:爬取百度百科词条
百度百科是一个汇集了各种知识的网站,我们可以通过Python爬虫来获取某个词条的标题,摘要,正文等信息。首先,我们需要导入requests库和BeautifulSoup库,分别用于发送HTTP请求和解析HTML代码。然后,我们需要定义一个函数get_html(url),用于获取指定URL的网页源代码。接着,我们需要定义一个函数parse_html(html),用于从网页源代码中提取出词条信息,并保存到一个字典中。最后,我们需要定义一个函数main(),用于调用前面的函数,并打印出结果。代码如下:
```python
import requests
from bs4 import BeautifulSoup
def get_html(url):
# 发送HTTP请求,获取网页源代码
response = requests.get(url)
# 判断响应状态码是否为200
if response.status_code == 200:
# 返回网页源代码的文本内容
return response.text
else:
# 抛出异常
raise Exception('请求失败')
def parse_html(html):
# 创建BeautifulSoup对象,指定解析器为lxml
soup = BeautifulSoup(html, 'lxml')
# 获取词条标题,去除空白字符
title = soup.find('h1').text.strip()
# 获取词条摘要,去除空白字符
summary = soup.find('div', class_='lemma-summary').text.strip()
# 获取词条正文,去除空白字符和引用标签
content = soup.find('div', class_='lemmaWgt-lemmaCatalog').text.strip().replace('[', '').replace(']', '')
# 将词条信息以字典的形式返回
return {'title': title, 'summary': summary, 'content': content}
def main():
# 定义百度百科Python词条的URL
url = 'https://baike.baidu.com/item/Python/407313'
# 调用get_html函数,获取网页源代码
html = get_html(url)
# 调用parse_html函数,提取词条信息
entry = parse_html(html)
# 打印结果
print(entry['title'])
print(entry['summary'])
print(entry['content'])
# 执行main函数
if __name__ == '__main__':
main()
运行结果如下:
Python
Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。
历史沿革
1989年圣诞节期间,在阿姆斯特丹,Guido von Rossum为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC 语言的一种继承。之所以选中Python(大蟒蛇的意思)作为程序的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者。
1991年,在alt.sources新闻组上发布了第一个公开版本(0.9.0)。
1994年1月,在第一届Python会议中,决定了该语言程序正式名为Python。
1994年10月17日,在comp.lang.python新闻组发布了第一个错误修正版本1.0.1。
2000年10月16日,发布了Python 2.0版,增加了实现完整的垃圾回收,并且支持Unicode。
2008年12月3日,发布了Python 3.0版。此版不完全兼容之前的Python源代码。不过,很多新特性后来也