Python爬虫入门实例:Python7个爬虫小案例(附源码)

news/2025/1/18 16:55:26/
引言

随着互联网的快速发展,数据成为了新时代的石油。Python作为一种高效、易学的编程语言,在数据采集领域有着广泛的应用。本文将详细讲解Python爬虫的原理、常用库以及实战案例,帮助读者掌握爬虫技能。

一、爬虫原理

爬虫,又称网络爬虫,是一种自动获取网页内容的程序。它模拟人类浏览网页的行为,发送HTTP请求,获取网页源代码,再通过解析、提取等技术手段,获取所需数据。

1. HTTP请求与响应过程

爬虫首先向目标网站发送HTTP请求,请求可以包含多种参数,如URL、请求方法(GET或POST)、请求头(Headers)等。服务器接收到请求后,返回相应的HTTP响应,包括状态码、响应头和响应体(网页内容)。

2. 常用爬虫技术

(1)请求库:如requests、aiohttp等,用于发送HTTP请求。
(2)解析库:如BeautifulSoup、lxml、PyQuery等,用于解析网页内容。
(3)存储库:如pandas、SQLite等,用于存储爬取到的数据。
(4)异步库:如asyncio、aiohttp等,用于实现异步爬虫,提高爬取效率。

Python入门基础教程【文末有惊喜福利】

二、Python爬虫常用库
1. 请求库

(1)requests:简洁、强大的HTTP库,支持HTTP连接保持和连接池,支持SSL证书验证、Cookies等。
(2)aiohttp:基于asyncio的异步HTTP网络库,适用于需要高并发的爬虫场景。

2. 解析库

(1)BeautifulSoup:一个HTML和XML的解析库,简单易用,支持多种解析器。
(2)lxml:一个高效的XML和HTML解析库,支持XPath和CSS选择器。
(3)PyQuery:一个Python版的jQuery,语法与jQuery类似,易于上手。

3. 存储库

(1)pandas:一个强大的数据分析库,提供数据结构和数据分析工具,支持多种文件格式。
(2)SQLite:一个轻量级的数据库,支持SQL查询,适用于小型爬虫项目。

接下来将分享7个Python爬虫的小案例,帮助大家更好地学习和了解Python爬虫的基础知识。以下是每个案例的简介和源代码:

1. 爬取豆瓣电影Top250

这个案例使用BeautifulSoup库爬取豆瓣电影Top250的电影名称、评分和评价人数等信息,并将这些信息保存到CSV文件中。

import requests
from bs4 import BeautifulSoup
import csv

# 请求URL
url = ‘https://movie.douban.com/top250’
# 请求头部
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.36’
}

# 解析页面函数
def parse_html(html):
soup = BeautifulSoup(html, ‘lxml’)
movie_list = soup.find(‘ol’, class_=‘grid_view’).find_all(‘li’)
for movie in movie_list:
title = movie.find(‘div’, class_=‘hd’).find(‘span’, class_=‘title’).get_text()
rating_num = movie.find(‘div’, class_=‘star’).find(‘span’, class_=‘rating_num’).get_text()
comment_num = movie.find(‘div’, class_=‘star’).find_all(‘span’)[-1].get_text()
writer.writerow([title, rating_num, comment_num])

# 保存数据函数
def save_data():
f = open(‘douban_movie_top250.csv’, ‘a’, newline=‘’, encoding=‘utf-8-sig’)
global writer
writer = csv.writer(f)
writer.writerow([‘电影名称’, ‘评分’, ‘评价人数’])
for i in range(10):
url = ‘https://movie.douban.com/top250start=’ + str(i*25) + ‘&filter=’
response = requests.get(url, headers=headers)
parse_html(response.text)
f.close()

if __name__ == ‘__main__’:
save_data()

2. 爬取猫眼电影Top100

这个案例使用正则表达式和requests库爬取猫眼电影Top100的电影名称、主演和上映时间等信息,并将这些信息保存到TXT文件中。

import requests import re # 请求URL url = '<https://maoyan.com/board/4>' # 请求头部 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.36' } # 解析页面函数 def parse_html(html): pattern = re.compile('<p class="name"><a href=".*?" title="(.*?)" data-act="boarditem-click" data-val="{movieId:\\d+}">(.*?)</a></p>.*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>', re.S) items = re.findall(pattern, html) for item in items: yield { '电影名称': item[1], '主演': item[2].strip(), '上映时间': item[3] } # 保存数据函数 def save_data(): f = open('maoyan_top100.txt', 'w', encoding='utf-8') for i in range(10): url = '<https://maoyan.com/board/4?offset=>' + str(i*10) response = requests.get(url, headers=headers) for item in parse_html(response.text): f.write(str(item) + '\ ') f.close() if __name__ == '__main__': save_data()

3. 爬取全国高校名单

这个案例使用正则表达式和requests库爬取全国高校名单,并将这些信息保存到TXT文件中。

import requests import re # 请求URL url = '<http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html>' # 请求头部 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.36' } # 解析页面函数 def parse_html(html): pattern = re.compile('<tr class="alt">.*?<td>(.*?)</td>.*?<td><div align="left">.*?<a href="(.*?)" target="_blank">(.*?)</a></div></td>.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?</tr>', re.S) items = re.findall(pattern, html) for item in items: yield { '排名': item[0], '学校名称': item[2], '省市': item[3], '总分': item[4] } # 保存数据函数 def save_data(): f = open('university_top100.txt', 'w', encoding='utf-8') response = requests.get(url, headers=headers) for item in parse_html(response.text): f.write(str(item) + '\ ') f.close() if __name__ == '__main__': save_data()

4. 爬取中国天气网城市天气

这个案例使用xpath和requests库爬取中国天气网的城市天气,并将这些信息保存到CSV文件中。

import requests
from lxml import etree
import csv# 请求URL
url = '<http://www.weather.com.cn/weather1d/101010100.shtml>'
# 请求头部
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.36'
}# 解析页面函数
def parse_html(html):
selector = etree.HTML(html)
city = selector.xpath('//*[@id="around"]/div/div[1]/div[1]/h1/text()')[0]
temperature = selector.xpath('//*[@id="around"]/div/div[1]/div[1]/p/i/text()')[0]
weather = selector.xpath('//*[@id="around"]/div/div[1]/div[1]/p/@title')[0]
wind = selector.xpath('//*[@id="around"]/div/div[1]/div[1]/p/span/text()')[0]
return city, temperature, weather, wind# 保存数据函数
def save_data():
f = open('beijing_weather.csv', 'w', newline='', encoding='utf-8-sig')
writer = csv.writer(f)
writer.writerow(['城市', '温度', '天气', '风力'])
for i in range(10):
response = requests.get(url, headers=headers)
city, temperature, weather, wind = parse_html(response.text)
writer.writerow([city, temperature, weather, wind])
f.close()if __name__ == '__main__':
save_data()
5. 爬取当当网图书信息

这个案例使用xpath和requests库爬取当当网图书信息,并将这些信息保存到CSV文件中。

import requests
from lxml import etree
import csv# 请求URL
url = '<http://search.dangdang.com/?key=Python&act=input>'
# 请求头部
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.36'
}# 解析页面函数
def parse_html(html):
selector = etree.HTML(html)
book_list = selector.xpath('//*[@id="search_nature_rg"]/ul/li')
for book in book_list:
title = book.xpath('a/@title')[0]
link = book.xpath('a/@href')[0]
price = book.xpath('p[@class="price"]/span[@class="search_now_price"]/text()')[0]
author = book.xpath('p[@class="search_book_author"]/span[1]/a/@title')[0]
publish_date = book.xpath('p[@class="search_book_author"]/span[2]/text()')[0]
publisher = book.xpath('p[@class="search_book_author"]/span[3]/a/@title')[0]
yield {
'书名': title,
'链接': link,
'价格': price,
'作者': author,
'出版日期': publish_date,
'出版社': publisher
}# 保存数据函数
def save_data():
f = open('dangdang_books.csv', 'w', newline='', encoding='utf-8-sig')
writer = csv.writer(f)
writer.writerow(['书名', '链接', '价格', '作者', '出版日期', '出版社'])
response = requests.get(url, headers=headers)
for item in parse_html(response.text):
writer.writerow(item.values())
f.close()if __name__ == '__main__':
save_data()
6. 爬取糗事百科段子

这个案例使用xpath和requests库爬取糗事百科的段子,并将这些信息保存到TXT文件中。

import requests
from lxml import etree# 请求URL
url = '<https://www.qiushibaike.com/text/>'
# 请求头部
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.36'
}# 解析页面函数
def parse_html(html):
selector = etree.HTML(html)
content_list = selector.xpath('//div[@class="content"]/span/text()')
for content in content_list:
yield content# 保存数据函数
def save_data():
f = open('qiushibaike_jokes.txt', 'w', encoding='utf-8')
for i in range(3):
url = '<https://www.qiushibaike.com/text/page/>' + str(i+1) + '/'
response = requests.get(url, headers=headers)
for content in parse_html(response.text):
f.write(content + '\

')
f.close()

if __name__ == '__main__':
save_data()
7. 爬取新浪微博

这个案例使用selenium和requests库爬取新浪微博,并将这些信息保存到TXT文件中。

import time
from selenium import webdriver
import requests# 请求URL
url = '<https://weibo.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.36'
}# 解析页面函数
def parse_html(html):
print(html)# 保存数据函数
def save_data():
f = open('weibo.txt', 'w', encoding='utf-8')
browser = webdriver.Chrome()
browser.get(url)
time.sleep(10)
browser.find_element_by_name('username').send_keys('username')
browser.find_element_by_name('password').send_keys('password')
browser.find_element_by_class_name('W_btn_a').click()
time.sleep(10)
response = requests.get(url, headers=headers, cookies=browser.get_cookies())
parse_html(response.text)
browser.close()
f.close()if __name__ == '__main__':
save_data()

希望这7个小案例能够帮助大家更好地掌握Python爬虫的基础知识!

Python入门基础教程【文末有惊喜福利】

爬虫注意事项与技巧
  • 遵循Robots协议

  • 尊重网站的爬虫协议,避免爬取禁止爬取的内容。

  • 设置合理的请求间隔

  • 避免对目标网站服务器造成过大压力,合理设置请求间隔。

  • 处理反爬虫策略

  • 了解并应对网站的反爬虫策略,如IP封禁、验证码等。

  • 使用代理IP、Cookies等技巧

  • 提高爬虫的稳定性和成功率。

  • 分布式爬虫的搭建与优化

  • 使用Scrapy-Redis等框架,实现分布式爬虫,提高爬取效率。

Python爬虫框架
  • Scrapy:强大的Python爬虫框架,支持分布式爬取、多种数据格式、强大的插件系统等。

  • Scrapy-Redis:基于Scrapy和Redis的分布式爬虫框架,实现分布式爬取和去重功能。

结语:

通过本文的讲解,相信读者已经对Python爬虫有了较为全面的认识。爬虫技能在数据分析、自然语言处理等领域具有广泛的应用,希望读者能够动手实践,不断提高自己的技能水平。同时,请注意合法合规地进行爬虫,遵守相关法律法规。祝您学习愉快!

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

① Python所有方向的学习路线图,清楚各个方向要学什么东西

②Python、PyCharm学习工具包全家桶,环境配置教程视频

③Python全套电子书籍PDF,全部都是干货知识

④ 100多节Python课程视频,涵盖必备基础、爬虫和数据分析

⑤ 100多个Python实战案例,学习不再是只会理论

全套Python学习资料分享:

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

图片

图片

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,还有环境配置的教程,给大家节省了很多时间。

图片

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

图片

四、入门学习视频全套

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

图片

图片

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

图片

图片

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


希望这些内容对大家有所帮助,因为你我都是热爱python的编程语言爱好者。


http://www.ppmy.cn/news/1564195.html

相关文章

算法竞赛(蓝桥杯)贪心算法1——数塔问题

题目描述 有如下所示的数塔&#xff0c;要求从底层走到顶层&#xff0c;若每一步只能走到相邻的结点&#xff0c;则经过的结点的数字之和最大是多少&#xff1f; 输入 输入数据首先包括一个整数整数 N (1≤N≤100)&#xff0c;表示数塔的高度&#xff0c;接下来用 N 行数字表示…

Axios 封装:处理重复调用与内容覆盖问题

问题描述&背景 下拉选择框&#xff0c;支持搜索&#xff0c;搜索时携带参数调用接口并更新下拉选项下拉选择连续进行多次搜索&#xff0c;先请求但响应时间长的返回值会覆盖后请求但响应时间短的举例&#xff1a; 搜索后先清空选项&#xff0c;再输入内容进行搜索。清空后…

架构设计:微服务还是集群更适合?

在现代软件开发中&#xff0c;微服务和集群是两种广泛应用的架构设计方案。随着系统需求的不断复杂化和规模的扩大&#xff0c;选择一种适合的架构对系统的性能、可维护性和扩展性至关重要。那么&#xff0c;在架构设计中&#xff0c;是选择微服务还是集群更适合&#xff1f;本…

文件上传 分片上传

分片上传则是将一个大文件分割成多个小块分别上传&#xff0c;最后再由服务器合并成完整的文件。这种做法的好处是可以并行处理多个小文件&#xff0c;提高上传效率&#xff1b;同时&#xff0c;如果某一部分上传失败&#xff0c;只需要重传这一部分&#xff0c;不影响其他部分…

c++领域展开第十三幕——类和对象(auto、范围for以及string类的初步讲解)超详细!!!!

文章目录 前言一、auto和范围for二、string类2.1 string类(了解)2.2 string类的常用接口说明2.2.1 string类对象的常见构造2.2.2 string类对象的容量操作 总结 前言 上篇博客我们了解了STL&#xff0c;今天我们来学习string类的一些初始内容&#xff0c;另外&#xff0c;在stri…

【深度学习】Pytorch:自实现残差网络

ResNet&#xff08;残差网络&#xff09;是由何凯明等人在2015年发表的论文《深度残差学习用于图像识别》中提出的一种开创性深度学习架构。它在ILSVRC 2015分类任务中获胜&#xff0c;并解决了深度神经网络中的退化问题&#xff0c;使得训练数百甚至数千层的网络成为可能。 残…

reac 后端接口返回二进制文件流前端导出文件

axios配置 在你的请求中加入 responseType:blob导出函数 export interface DownloadFileOptions {filename: string; //文件名称}/*** 下载二进制文件流* param data - 二进制数据* param options - 下载配置*/export const downloadBinaryFile1 (data: any, // 这里使用 a…

3.数据库系统

3.1数据库的基本概念 3.1.1:数据库体系结构 3.1.1.1集中式数据库系统 数据是集中的 数据管理是集中的 数据库系统的素有功能(从形式的用户接口到DBMS核心)都集中在DBMS所在的计算机 3.1.1.2C/S结构 客户端负责数据表示服务服务器主要负责数据库服务 数据库系统分为前端和后端…