Python爬虫入门:7个实战案例带你快速上手

Python 网络爬虫入门与实战 网络爬虫(Web Crawler)是自动访问网络并提取信息的程序。它可以模拟人类用户在浏览器中的行为,访问网页、抓取数据并存储到本地或数据库中。网络爬虫在信息检索、数据挖掘、搜索引擎等领域有广泛应用。Scrapy 是一个强大的爬虫框架,支持异步处理和数据存储。它适合大型爬虫项目,可以高效抓取和解析数据。yield item通过本文的学习,您应该对 Python 网络爬虫有了全面的了解。从基础的 Requests 库到高级的 Scrapy 框架,再到实战案例,涵盖了网络爬虫的方方面面。 阅读详情
AI摘要

在数据驱动时代,Python因语法简洁、库丰富成为爬虫开发首选语言。本文介绍7个Python爬虫实战案例,包括静态网页、动态内容、API接口抓取等,还提及Scrapy框架实战,最后给出爬虫开发注意事项,助读者掌握Python爬虫开发技能。

包含编程籽料、学习路线图、爬虫代码、安装包等!【点击领取】

前言
在当今数据驱动的时代,网络爬虫已成为获取和分析网络数据的重要工具。Python凭借其简洁的语法和丰富的第三方库,成为了爬虫开发的首选语言。本文将介绍7个Python爬虫实战案例,从简单到复杂,带你快速掌握爬虫开发的核心技能。

案例1:静态网页抓取 - 获取豆瓣电影Top250

import requests
from bs4 import BeautifulSoup
import csv

def get_douban_top250():
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }
    base_url = "https://movie.douban.com/top250"
    
    with open('douban_top250.csv', 'w', newline='', encoding='utf-8') as f:
        writer = csv.writer(f)
        writer.writerow(['排名', '电影名称', '评分', '评价人数', '经典台词'])
        
        for start in range(0, 250, 25):
            url = f"{base_url}?start={start}"
            response = requests.get(url, headers=headers)
            soup = BeautifulSoup(response.text, 'html.parser')
            
            for item in soup.find_all('div', class_='item'):
                rank = item.find('em').text
                title = item.find('span', class_='title').text
                rating = item.find('span', class_='rating_num').text
                num = item.find('div', class_='star').find_all('span')[-1].text[:-3]
                quote = item.find('span', class_='inq').text if item.find('span', class_='inq') else '无'
                
                writer.writerow([rank, title, rating, num, quote])
                
    print("豆瓣Top250数据已保存到douban_top250.csv")

if __name__ == '__main__':
    get_douban_top250()

技术要点:

使用requests库发送HTTP请求

使用BeautifulSoup解析HTML

处理分页数据

数据存储到CSV文件

案例2:动态内容抓取 - 使用Selenium获取京东商品信息

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
import time

def get_jd_product(keyword):
    # 设置Chrome驱动路径
    service = Service('chromedriver.exe')  # 替换为你的chromedriver路径
    driver = webdriver.Chrome(service=service)
    
    try:
        driver.get("https://www.jd.com")
        search_box = driver.find_element(By.ID, "key")
        search_box.send_keys(keyword)
        search_box.submit()
        
        time.sleep(3)  # 等待页面加载
        
        # 滚动页面以加载更多商品
        for _ in range(3):
            driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
            time.sleep(2)
        
        products = driver.find_elements(By.CSS_SELECTOR, ".gl-item")
        
        for i, product in enumerate(products[:10], 1):
            name = product.find_element(By.CSS_SELECTOR, ".p-name a").text
            price = product.find_element(By.CSS_SELECTOR, ".p-price strong").text
            print(f"{i}. {name} - 价格: {price}")
            
    finally:
        driver.quit()

if __name__ == '__main__':
    get_jd_product("Python编程书籍")

技术要点:

使用Selenium模拟浏览器操作

处理JavaScript渲染的动态内容

页面滚动加载更多数据

元素定位与交互

案例3:API接口抓取 - 获取天气数据

import requests
import json

def get_weather(city):
    url = f"http://wthrcdn.etouch.cn/weather_mini?city={city}"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }
    
    try:
        response = requests.get(url, headers=headers)
        data = json.loads(response.text)
        
        if data['status'] == 1000:
            weather_info = data['data']
            print(f"城市: {weather_info['city']}")
            print(f"温度: {weather_info['wendu']}℃")
            print("预报:")
            for forecast in weather_info['forecast']:
                print(f"{forecast['date']}: {forecast['type']}, {forecast['high']}/{forecast['low']}, 风向: {forecast['fengxiang']}")
        else:
            print("获取天气信息失败")
    except Exception as e:
        print(f"发生错误: {e}")

if __name__ == '__main__':
    get_weather("北京")

技术要点:

直接调用API接口获取数据

处理JSON格式的响应

错误处理与异常捕获

案例4:登录验证 - 模拟登录GitHub

import requests
from bs4 import BeautifulSoup

def login_github(username, password):
    session = requests.Session()
    login_url = "https://github.com/login"
    session_url = "https://github.com/session"
    
    # 获取登录页面,提取authenticity_token
    response = session.get(login_url)
    soup = BeautifulSoup(response.text, 'html.parser')
    token = soup.find('input', {'name': 'authenticity_token'})['value']
    
    # 构造登录数据
    login_data = {
        'commit': 'Sign in',
        'authenticity_token': token,
        'login': username,
        'password': password
    }
    
    # 发送登录请求
    response = session.post(session_url, data=login_data)
    
    # 验证登录是否成功
    if response.url == "https://github.com/":
        print("登录成功!")
        # 获取用户信息
        profile_response = session.get(f"https://github.com/{username}")
        soup = BeautifulSoup(profile_response.text, 'html.parser')
        name = soup.find('span', {'itemprop': 'name'}).text.strip()
        print(f"欢迎, {name}!")
    else:
        print("

技术要点:

使用Session保持登录状态

处理表单和CSRF token

模拟登录流程

验证登录结果

案例5:图片爬取 - 下载Unsplash壁纸

import os
import requests
from bs4 import BeautifulSoup

def download_unsplash_images(keyword, count=10):
    url = f"https://unsplash.com/s/photos/{keyword}"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }
    
    # 创建保存目录
    save_dir = f"unsplash_{keyword}"
    os.makedirs(save_dir, exist_ok=True)
    
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 获取图片链接
    img_tags = soup.find_all('img', {'class': 'YVj9w'})[:count]
    
    for i, img in enumerate(img_tags, 1):
        img_url = img['src'] if 'src' in img.attrs else img['data-src']
        if not img_url.startswith('http'):
            continue
            
        try:
            img_data = requests.get(img_url, headers=headers).content
            with open(f"{save_dir}/{keyword}_{i}.jpg", 'wb') as f:
                f.write(img_data)
            print(f"已下载第{i}张图片")
        except Exception as e:
            print(f"下载第{i}张图片失败: {e}")

if __name__ == '__main__':
    download_unsplash_images("nature", 5)

技术要点:

批量下载网络图片

创建本地目录保存文件

处理图片URL

二进制文件写入

案例6:反爬虫应对 - 使用代理IP抓取数据

import requests
from fake_useragent import UserAgent
import random

def get_with_proxy(url, proxy_list):
    ua = UserAgent()
    headers = {'User-Agent': ua.random}
    
    for proxy in random.sample(proxy_list, len(proxy_list)):
        try:
            response = requests.get(
                url,
                headers=headers,
                proxies={"http": proxy, "https": proxy},
                timeout=10
            )
            if response.status_code == 200:
                return response.text
        except:
            continue
            
    return None

def scrape_with_anti_anti_spider():
    # 示例代理列表(实际使用时需要获取有效的代理IP)
    proxy_list = [
        'http://123.456.789.101:8080',
        'http://111.222.333.444:8888',
        # 添加更多代理IP...
    ]
    
    target_url = "https://www.example.com/data"  # 替换为目标网站
    
    html = get_with_proxy(target_url, proxy_list)
    if html:
        print("成功获取数据")
        # 在这里处理获取到的HTML数据
    else:
        print("获取数据失败")

if __name__ == '__main__':
    scrape_with_anti_anti_spider()

技术要点:

使用随机User-Agent

代理IP轮换

异常处理和重试机制

应对反爬虫策略

案例7:Scrapy框架实战 - 构建知乎热榜爬虫

首先安装Scrapy:

pip install scrapy

然后创建Scrapy项目:

scrapy startproject zhihu_hot
cd zhihu_hot

修改items.py:

import scrapy

class ZhihuHotItem(scrapy.Item):
    rank = scrapy.Field()
    title = scrapy.Field()
    hot_score = scrapy.Field()
    url = scrapy.Field()

创建spiders/zhihu_spider.py:

import scrapy
from zhihu_hot.items import ZhihuHotItem

class ZhihuSpider(scrapy.Spider):
    name = 'zhihu'
    allowed_domains = ['www.zhihu.com']
    start_urls = ['https://www.zhihu.com/hot']
    
    def parse(self, response):
        items = response.css('.HotItem')
        for item in items:
            zhihu_item = ZhihuHotItem()
            zhihu_item['rank'] = item.css('.HotItem-rank::text').get()
            zhihu_item['title'] = item.css('.HotItem-title::text').get()
            zhihu_item['hot_score'] = item.css('.HotItem-metrics::text').get()
            zhihu_item['url'] = item.css('.HotItem-content a::attr(href)').get()
            yield zhihu_item

修改settings.py添加以下配置:

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
ROBOTSTXT_OBEY = False
DOWNLOAD_DELAY = 2
FEED_FORMAT = 'json'
FEED_URI = 'zhihu_hot.json'

运行爬虫:

scrapy crawl zhihu

技术要点:

Scrapy框架的基本使用

项目结构与组件

Item定义与数据处理

选择器与CSS选择器

结果导出

爬虫开发注意事项
遵守robots.txt协议:在爬取网站前检查robots.txt文件,了解网站的爬取限制

设置合理的请求间隔:避免对目标网站造成过大压力

处理异常情况:网络错误、页面结构变化等情况需要妥善处理

尊重版权和隐私:不要爬取敏感或受版权保护的数据

用户代理设置:使用合理的User-Agent标识你的爬虫

数据存储考虑:根据数据量选择合适的存储方式(CSV、数据库等)

结语
通过这7个实战案例,我们从简单的静态页面抓取到复杂的动态内容获取,从基础请求到框架使用,逐步掌握了Python爬虫开发的各项技能。爬虫技术的学习是一个不断实践和积累经验的过程,希望这些案例能为你提供良好的起点。

最后:
希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!

文末福利
最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。

包含编程资料、学习路线图、源代码、软件安装包等!【点击这里】领取!
① Python所有方向的学习路线图,清楚各个方向要学什么东西
② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例,学习不再是只会理论
④ 华为出品独家Python漫画教程,手机也能学习

在这里插入图片描述

超详细!Python爬虫实战案例 阅读详情

相关推荐

【Python爬虫系列】浅尝一下爬虫40例实战教程+源代码【基础+进阶】

好啦!上面都是小编整理的一些简单的爬虫实战案例,如果你是新手还没有安装那就先找小编拿最基础的新手大礼包叭~像试试简单的爬虫项目的就可以直接开干啦👇学习学习👇。

xy258009的博客 7236

Python网络爬虫实战项目大全!

学习Python主要是爬取各种数据,进行数据分析,获得各种。今天我们就来做些Python实战项目,包含微信公号、豆瓣、知乎等网站爬虫,大家也要自己动手练练看呀。

xiangxueerfei的博客 1941

python爬虫入门教程pdf-从零开始学Python网络爬虫 PDF 原书扫描版

给大家带来的一篇关于Python爬虫相关的电子书资源,介绍了关于Python、网络爬虫方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小143.9 MB,罗攀编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:7.9。内容介绍读者评价基于Python 3的图书,代码挺多,这是优点。缺点是,很多地方没有解释清楚,作为一个脑子转得不太灵光的零基础萌新,有很坎坷的感觉。如果是想快速实现功能...

weixin_37988176的博客 4142

爬虫实战案例

在上面的代码中,我们首先使用 get_movies_data() 函数从 MongoDB 数据库中获取所有电影的数据,并将这些数据存储在一个列表中。接下来,我们使用 drop_duplicates() 方法去除重复的数据,并使用 fillna() 方法处理缺失数据(在这里,我们使用前向填充的方式)。在上面的代码中,我们首先使用 get_movies_data() 函数从 MongoDB 数据库中获取所有电影的数据,并将这些数据存储在一个列表中。首先,我们需要确定我们的目标是爬取豆瓣电影排行榜的数据。

Kali与编程 3121

7个Python爬虫入门小案例

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

csdn1561168266的博客 2008

性能优化误区:过早优化与JVM参数盲调

场经验分享,Java面试,简历修改,求职辅导尽在。

Why_does_it_work的博客 8万+

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

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

m0_75067629的博客 1万+

跟着团子学SAP EPPM:项目管理常见的集成场景(PPM\PS\MS Project)

在SAP的EPPM解决方案中,针对企业战略级别的投资组合管理首先是定义合适的投资组合的层级结构,在投资组合下可以通过不同维度去定义投资篮(Portofolio Bucket)进行层层拆分,在最下层级的投资篮下可以分配明细的投资项(Portofolio Item),投资项可以是独立的一个一个具体执行的项目,也可以是单纯的一次服务等等。 今天主要聚焦在投资项的维度展开讲一下在SAP中投资项常见的几种集成模式: 集成场景1:使用PPM中的Project Management进行项目管理 第一个场景是在创建投资项

Lucas1211的博客 4139

python爬虫入门教程(一):开始爬虫前的准备工作

python爬虫(数据采集)入门教程

笔墨留年。 8万+

医学图像处理(一)使用U-Net进行MRI的肝脏分割

医学图像处理(一)使用U-Net进行MRI的肝脏分割数据集搜集训练集和测试集划分问题一: 测试集不包括GroundTruth问题二:T1和T2的数据能一起训练吗?问题三: T1的图像在文件夹中分成了InPhase和OutPhase,这个有什么区别?分离出肝脏将dicom文件转换为png格式数据增强U-net网络搭建自定义DatasetMain.py实验结果总结 图像分割小白一枚,之前接到一个MRI图像肝脏分割的任务。对于医学图像分割,第一想到的就是Unet. Unet在2015的MICCAI上首次提出,在医

qq_34003876的博客 2万+

ComfyUI-controlnet控制出图

提供加载预处理器节点。

Bu2n的博客 5494

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

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

Candyz7的博客 2万+

opencv的cmake报错

1、下载 ippicv_2021.8_win_intel64_20230330_general.zip、v0.1.2a.zip、opencv_videoio_ffmpeg.dll、opencv_videoio_ffmpeg_64.dll、ffmpeg_version.cmake。由于下载源在https://raw.githubusercontent.com,由于网络原因下载不顺畅,可以先找到文件下载到对应文件夹下,或者更改网络环境。ffmpeg_version.cmake文件,打开后显示如下, 另存即可。

nownow_的博客 1299

Python 网络爬虫教程:从入门到高级的全面指南

网络爬虫是自动访问互联网并提取信息的程序。它可以用于数据采集、市场分析、学术研究等多种场景。简单来说,网络爬虫就是模拟用户在浏览器中的行为,获取网页内容。本文详细介绍了 Python 网络爬虫的基础知识、实现步骤及实战案例。随着技术的不断发展,网络爬虫的应用场景也在不断扩大。未来,你可以结合机器学习等技术,进一步提升数据分析能力。

孤客科技 9014

从零构建:如何用MATLAB和SDR硬件搭建你的第一个OFDM卫星通信原型系统

本文详细介绍了如何利用MATLAB和SDR硬件从零构建OFDM卫星通信原型系统。通过核心组件选型、开发环境配置、OFDM算法实现到系统集成与优化的完整流程,帮助通信工程学生和DIY爱好者快速掌握软件无线电技术在卫星通信中的应用。特别推荐使用HackRF One和MATLAB工具箱实现高性价比的OFDM系统验证。

pz890123456的博客 378

5款免费二进制编辑器横向评测:从HxD到ImHex谁更适合你?

本文对5款免费二进制编辑软件进行深度横向评测,包括HxD、wxHexEditor、010 Editor、ImHex和GNU Emacs,涵盖从轻量级到专业级的各种需求。评测基于文件处理能力、编辑功能、分析工具等核心维度,为开发者、逆向工程师和安全研究人员提供实用选择指南,帮助用户根据具体场景选择最适合的二进制编辑工具。

weixin_29278805的博客 371

零基础学Python网络爬虫案例实战全流程详解(入门与提高篇)

笔者编写的《Python金融大数据挖掘与分析全流程详解》于2019年出版面市后,陆续有不少读者表示对该书的爬虫部分非常感兴趣,想做进一步的学习。笔者由此萌生了一个想法:专门针对Python爬虫技术编写一套书籍,在保留之前核心内容的基础上,新增更多实战案例,方便读者在练中学,并体会Python爬虫在实战中的应用。

mirana的专栏 3013

【数据分享】12.5米分辨率DEM地形数据(分省)

该数据来源于NASA地球科学数据网站(https://nasadaacs.eos.nasa.gov/),是ALOS卫星获取的高精度地形数据。该数据由于精度高,包括全省范围的数据和省内每个城市范围的数据!

JData_Engineer的博客 2171
上一篇: 2025最新超详细PyCharm IDE安装环境配置完整版教程,看这一篇就足够了
下一篇: Python编程入门:10道经典练习题附详细解答
Python_trys
博客等级 码龄2年 4369粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值