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

引言

随着互联网的快速发展,数据成为了新时代的石油。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 writerwriter = csv.writer(f)writer.writerow(['电影名称', '评分', '评价人数'])for i in range(10):url = '<https://movie.douban.com/top250?start=>' + 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) + '\\\\n')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) + '\\\\n')f.close()if __name__ == '__main__':save_data()

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

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

Python入门基础教程【111】

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 + '\\\\n')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爬虫的基础知识!

爬虫注意事项与技巧

  • 遵循Robots协议

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

  • 设置合理的请求间隔

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

  • 处理反爬虫策略

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

  • 使用代理IP、Cookies等技巧

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

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

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

Python爬虫框架

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

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

结语:

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

关于Python技术储备

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

整理出了一套系统的学习路线,这套资料涵盖了诸多学习内容:开发工具,基础视频教程,项目实战源码,51本电子书籍,100道练习题等。相信可以帮助大家在最短的时间内,能达到事半功倍效果,用来复习也是非常不错的。

👉Python学习路线汇总👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)

👉Python必备开发工具👈

温馨提示:篇幅有限,已打包文件夹

👉Python学习视频合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

👉实战案例👈

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

👉100道Python练习题👈

检查学习结果。

👉面试刷题👈

资料获取方式:↓↓↓↓
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/842147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3.0 里为什么要用 Proxy API替代 defineProperty API?

Vue3.0选择使用Proxy API替代defineProperty API的原因主要有以下几点&#xff1a; 性能提升&#xff1a; Proxy API允许拦截整个对象&#xff0c;而defineProperty API需要遍历对象的每个属性进行拦截。因此&#xff0c;Proxy API在捕获对象的访问和修改时更为高效。 更全面的…

maptr(2):论文及代码解读

文章目录 1. 介绍2. 模型架构2.1 GT 数据制作2.2 模型架构2.3 GKT2.3.1 cross attn 的变化2.3.1 GKT2.4 decoder部分2.5 header2.5.1 reg_branch2.5.2 cls_branch3. Loss计算3.1 正负样本匹配3.2 loss计算<

2024年上半年信息系统项目管理师下午真题及答案(第二批)

试题一 某项目计划工期为10个月&#xff0c;预算210万元&#xff0c;第7个月结束时&#xff0c;项目经理进行了绩效评估&#xff0c;发现实际完成了总计划进度的70%。项目的实际数据如表所示&#xff1a; 单击下面头像图片领取更多软考独家资料

企业内部通讯软件—WorkPlus适配信创即时通讯软件

在现代企业中&#xff0c;良好的内部通讯是保持高效工作和顺利运营的关键。企业内部通讯软件的选择对于提升沟通效率、促进团队合作、保障数据安全和隐私保护至关重要。本文将介绍企业内部通讯软件的重要性探讨一些常用的软件&#xff0c;帮助企业做出明智的选择。 一、企业内…

深度融合大语言模型与知识图谱:思通数科企业知识库智能问答系统的创新实践

摘要 在知识经济时代&#xff0c;企业知识管理的重要性日益凸显。本文深入探讨了思通数科如何利用大语言模型和知识图谱技术&#xff0c;构建企业知识库智能问答系统&#xff0c;以促进知识的高效获取、共享、应用和创新&#xff0c;从而提升企业的知识管理水平和业务价值。 1…

钕铁硼表面磷化处理

大家都知道烧结钕铁硼易氧化、易腐蚀&#xff0c;日久将造成磁性能的衰减甚至丧失&#xff0c;所以使用前必须进行严格的防腐处理。在之前的文章中已经向大家介绍过与烧结钕铁硼表面处理相关的知识和电镀的工艺流程&#xff0c;除了电镀之外&#xff0c;钕铁硼表面处理还可采用…

Reids高频面试题汇总总结

一、Redis基础 Redis是什么? Redis是一个开源的内存数据存储系统,它可以用作数据库、缓存和消息中间件。Redis支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等,并提供了丰富的操作命令来操作这些数据结构。Redis的主要特点是什么? 高性能:Redis将数据存储在内…

大数据开发面试题【ClickHouse篇】

170、clickhouse介绍以及架构 clickhouse一个分布式列式存储数据库&#xff0c;主要用于在线分析查询 171、列式存储和行式存储有什么区别&#xff1f; 行式存储&#xff1a; 1、数据是按行存储的 2、没有建立索引的查询消耗很大的IO 3、建立索引和视图花费一定的物理空间和…

查看Mongo是否正在备份?

要查看MongoDB是否正在备份&#xff0c;可以通过以下几种方法&#xff1a; 查看MongoDB的进程列表&#xff1a; 使用命令ps -ef | grep mongo&#xff0c;这将列出所有正在运行的MongoDB进程。在输出的列表中&#xff0c;你可以查看是否有与备份相关的进程或任务正在运行。 查…

rapidssl通配符证书低至600元一年

RapidSSL是Geotrust旗下的子品牌&#xff0c;主要经营的是入门级的SSL数字证书。RapidSSL旗下的SSL证书产品不多&#xff0c;只有DV基础型单域名SSL证书和通配符SSL证书&#xff0c;不过这两款SSL证书满足了大多数网站的需求。今天就随SSL盾小编了解RapidSSL旗下的通配符SSL证书…

C# 结构体(Struct)

1. 结构体的基本概念 在C#中,结构体是一种值类型,用于封装一组相关的数据。与类(Class)不同,结构体的实例存储在栈上,而不是堆上,因此结构体的性能通常比类更高,特别是在需要频繁创建和销毁实例时。 2. 结构体的声明和使用 你可以使用struct关键字来声明一个结构体:…

【补充1】字节对齐

文章目录 1.字节对齐的基本概念2.字节对齐规则3.实践出真知&#xff08;加大难度&#xff09;4 位域 1.字节对齐的基本概念 &#xff08;1&#xff09;现代计算机中内存空间都是按照byte划分的&#xff0c; 从理论上讲似乎对任何类型的变量的访问可以从任何地址开始&#xff0…

MybatisPlus中自定义sql

背景 在开发过程中&#xff0c;可能会出现除了where条件&#xff0c;其它sql比较复杂&#xff0c;这时候就需要用到自定义sql了。 问题 如&#xff1a;用户状态为正常的数据年龄加一&#xff08;所有用户年龄加一&#xff09; 数据库中sql&#xff1a; UPDATE USER SET…

协变(List泛型作为方法参数时的父类子类问题)

有段时间没搞.net的项目了&#xff08;没办法&#xff0c;谁让国内JAVA流行是事实&#xff09;。最近又回归.net&#xff08;哪里需要哪里搬~&#xff09;。 接收到需求后&#xff0c;一顿输出&#xff0c;结果…咦?编译失败??? 错误信息&#xff1a; CS1503:参数1:无法…

Docker 常用命令大全!!

Docker 常用命令 一、启动类1. 启动 docker2. 关闭 docker3. 重新启动 docker4. docker 设置自启动5. 查看 docker 运行状态6. 查看 docker 版本号等信息7. docker 帮助 二、 镜像类1. 查看镜像2. 搜索镜像3. 拉取镜像4. 运行镜像5. 删除镜像6. 加载镜像7. 保存镜像 三、容器类…

react解决电脑分辨率及缩放导致页面变形的问题

此处借鉴Vue3 解决电脑分辨率及缩放导致页面变形的问题-CSDN博客&#xff1a; 新建devicePixelRatio.js&#xff1a; /*** description 校正windows页面在系统进行缩放后导致页面被放大的问题&#xff0c;通常放大比例是125%、150%* **/class DevicePixelRatio {constructor(…

python-opencv 边缘检测、直线检测、圆检测

文章目录 Canny算法霍夫变换-直线检测霍夫变换-圆形检测 Canny算法 除了将目标与背景分离开来&#xff0c;边缘检测也同样是一种图像分割方法&#xff0c;从分割结果来看&#xff0c;adaptiveThreshold函数显然就采取了类似边缘检测的划分方案。 Canny在1986年提出了一种边缘…

【源码】2024完美运营版商城/拼团/团购/秒杀/积分/砍价/实物商品/虚拟商品等全功能商城

后台可以自由拖曳修改前端UI页面 还支持虚拟商品自动发货等功能 前端UNIAPP 后端PHP 一键部署版本 获取方式&#xff1a; 微&#xff1a;uucodes

代码随想录算法训练营第四十一天|动态规划理论基础、509. 斐波那契数列、70. 爬楼梯、746. 使用最小花费爬楼梯

动态规划理论基础 什么是动态规划 动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的&#xff0c;这一点就…

X2Doris使用指南:界面化数据迁移工具 - 轻松实现整库迁移至Doris

什么是X2Doris X2Doris 是 SelectDB 团队开发的&#xff0c;专门用于将各种离线数据迁移到 Apache Doris 中的核心工具&#xff0c;该工具集 自动建 Doris 表 和 数据迁移 为一体&#xff0c;目前支持了 Apache Doris/Hive/Kudu/StarRocks 数据库往 Doris 或 SelectDB Cloud 迁…