Posts

Scrapy 实战教程:10分钟构建你的第一个新闻数据爬虫

  前言:Scrapy为何如此高效? Scrapy是一个为了爬取网站并提取结构化数据而设计的应用程序框架。把它想象成一套用于建造爬虫的“乐高”积木:它为你提供了所有必需的模块(网络请求、数据解析、存储等),你只需像拼图一样将它们组合起来,就能快速构建出强大、高效的爬虫,而无需关心底层复杂的实现细节。 准备好了吗?让我们开始计时! 第1步:安装 Scrapy (耗时: 1分钟) 打开你的终端,运行以下命令: pip install scrapy 第2步:创建你的爬虫项目 (耗时: 1分钟) Scrapy提供了一个便捷的命令来生成整个项目框架。 scrapy startproject my _news_crawler cd my_news_ crawler 执行后,你会看到一个如下结构的文件夹,Scrapy已经为你搭好了所有架子: my_news_crawler / scrapy.cfg my_news_crawler / __init__.py items.py # 定义数据结构的地方 middlewares.py pipelines.py # 处理数据的地方 settings.py # 配置文件 spiders / # 存放爬虫代码的地方 __init__.py 第3步:定义你的“数据容器” (Item) (耗时: 2分钟) 我们需要告诉Scrapy,我们想抓取哪些数据。打开  my_news_crawler/items.py  文件,修改它: # items.py import scrapy class NewsItem( scrapy.Item): # define the fields for your item here like: title = scrapy.Field() # 新闻标题 url = scrapy.Field() # 新闻链接 source = scrapy.Field() # 新闻来源 这就像定义了一个数据模板,稍后我们会用抓取到的数据来填充它。 第44步:编写...

DIY你的专属信息面板:用Python聚合天气、汇率与每日热点

  前言:告别信息“碎片化” 你是否每天早上都需要打开好几个App或网页,分别查看今天的天气、最新的汇率,以及发生了什么热门新闻?这个过程不仅繁琐,而且效率低下。 作为一名Python爱好者,我们可以利用代码的力量,将这些分散的信息聚合起来,打造一个属于自己的、一键启动的个人信息面板。本文将通过一个有趣的实战项目,带你完成这个小工具。 一、项目规划与技术准备 我们的目标:  创建一个Python脚本,当运行时,它能在控制台清晰地展示出: 指定城市当天的天气状况。 指定货币之间的最新汇率。 网络上的热门新闻标题。 技术选型: requests : 用于向API和网站发送HTTP请求,获取数据。 beautifulsoup4 : 用于解析HTML网页,提取我们需要的内容。 环境准备: pip install requests beautifulsoup4 二、第一步:获取天气数据 (API实战) 我们将使用OpenWeatherMap提供的免费天气API。 获取API Key:  前往  OpenWeatherMap官网 ,注册一个免费账户,然后在你的个人后台找到API keys,复制一个备用。 编写代码: # weather.py import requests def get_weather ( api_key, city ): base_url = "http://api.openweathermap.org/data/2.5/weather" params = { 'q' : city, 'appid' : api_key, 'units' : 'metric' , # 使用摄氏度 'lang' : 'zh_cn' # 获取中文天气描述 } try : response = requests.get(base_url, params=params) response.raise_for_status() # 如果请求失败,则抛出异常 data = response.json() ...

爬虫的“身份伪装”三部曲:User-Agent、Cookie与浏览器指纹深度剖析

  前言:爬虫的“我是谁”问题 现代网络反爬,本质上是一场关于“身份验证”的攻防战。网站想方设法地确认每一个访客的身份:你是善意的真人用户,还是自动化的机器程序? 在这场验证中,你的爬虫有三个关键的身份层面: User-Agent (名片):  你自己声称的身份。 Cookie (通行证):  你与网站的交互历史和凭证。 浏览器指纹 (DNA):  你运行环境的客观、物理特征。 只有当这三者统一、协调且看起来“普通”时,你的爬虫才能不被察觉。本文将带你深度剖析这“身份伪装”的三部曲。 第一幕:User-Agent - 你的“名片” User-Agent是一个HTTP请求头,它告诉服务器“我是谁,我用的是什么浏览器,什么操作系统”。这是最基础、最普遍的检测点。 为何重要?  默认情况下,Python的 requests 库会发送类似 python-requests/2.28.1 这样的User-Agent,这无异于在网站门口大喊:“我是爬虫!” 策略演进: 基础策略:静态列表轮换  准备一个包含多种真实浏览器UA的列表,在每次请求时随机选择一个。这是最简单的伪装。 进阶策略:动态获取最新UA  使用 fake-useragent 这样的库,它可以从在线数据库获取最新的、全球用户正在使用的真实UA。这能有效避免因使用过时的UA而被识别。 # pip install fake-useragent from fake_useragent import UserAgent ua = UserAgent() random_ua = ua.random headers = { 'User-Agent' : random_ua} # response = requests.get(url, headers=headers) 全局视野:别只伪造一张“名片”  一个真实的浏览器发送的绝不仅仅是User-Agent。它会附带一整套请求头,如 Accept ,  Accept-Language ,  Accept-Encoding ,  Connection 等。高级的反爬虫系统会校验这些头信息的一致性(例如,Chrome的UA就应该对应Chrome特有的 sec-ch-ua ...

Cloudflare、滑块、JS盾:我用 Python 是怎么一步步绕过它们的?

  序章:遭遇“三重门” 最近,我盯上了一个数据网站。本以为是个轻松的活儿,没想到一头撞上了反爬界的“终极Boss”。它部署了堪称“三重门”的防御体系: 第一道门:  Cloudflare的“五秒盾”,一个强制的JS挑战页面。 第二道门:  登录页的滑块验证码,需要精确操作。 第三道门:  隐藏在风平浪静之下的浏览器指纹检测,无声无息地将你拒之门外。 普通的爬虫脚本在它面前,存活不超过三秒。这反而激起了我的好胜心,我决定用我最熟悉的Python武器库,和它来一场堂堂正正的较量。 第一关:Cloudflare的“五秒盾” (JS Challenge) 我的第一次尝试,自然是 requests 库,简单直接。结果毫不意外,返回的HTML内容是“Checking your browser before accessing…”,我的程序被永远地挡在了门外。 失败原因:  这个页面需要浏览器在5秒内执行一段复杂的JavaScript代码,计算出一个“答案”并提交,以证明自己是个真实的浏览器。 requests 只是一个HTTP客户端,它不会执行任何JS。 破局之法:请出“真实浏览器”Playwright。 这道门的“钥匙”就是JS执行能力。Playwright驱动的是一个真实的、完整的浏览器内核(如Chromium),它能完美地执行页面上的任何JS代码。因此,破解这道门,甚至不需要任何花哨的操作。 from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless= False ) # 方便观察,先开启有头模式 page = browser.new_page() # 直接访问,Playwright会自动处理JS挑战和跳转 page . goto ( 'https://the-target-website.com' ) # 等待登录框出现,证明我们已成功进入内页 page .wait_for_selector( '#username' ) print ( "成功突破第一道门:Cloudflare JS盾!...