当前位置: 首页 > news >正文

使用Scrapy 爬取“http://tuijian.hao123.com/”网页中左上角“娱乐”、“体育”、“财经”、“科技”、历史等名称和URL

一、网页信息

二、检查网页,找出目标内容

三、根据网页格式写正常爬虫代码

from bs4 import BeautifulSoup
import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
}
url = 'http://tuijian.hao123.com/'
response = requests.get(url=url,headers=headers)
response.encoding='utf-8'soup = BeautifulSoup(response.text, 'html.parser')
list_div = soup.find('div', class_='v2-nav')
ul_tags = list_div.find_all('ul')[0]
li_tags = ul_tags.find_all('li')for li in li_tags:a_tag = li.find('a')if a_tag:title = a_tag.texthref = a_tag['href']if title in ["娱乐", "体育", "财经", "科技", "历史"]:print(f"{title}: {href}")

四、创建Scrapy项目haohao

1.进入相关目录中,执行:scrapy startproject haohao

2.创建结果

五、创建爬虫项目haotuijian.py

1.进入相关目录中,执行:scrapy genspider haotuijian http://tuijian.hao123.com/

2.执行结果,目录中出现haotuijian.py文件

六、写爬虫代码和配置相关文件

1.haotuijian.py文件代码
import scrapy
from bs4 import BeautifulSoup
from ..items import HaohaoItemclass HaotuijianSpider(scrapy.Spider):name = 'haotuijian'allowed_domains = ['tuijian.hao123.com']start_urls = ['http://tuijian.hao123.com/']def parse(self, response):soup = BeautifulSoup(response.text, 'html.parser')list_div = soup.find('div', class_='v2-nav')ul_tags = list_div.find_all('ul')[0]li_tags = ul_tags.find_all('li')for li in li_tags:a_tag = li.find('a')if a_tag:title = a_tag.texthref = a_tag['href']if title in ["娱乐", "体育", "财经", "科技", "历史"]:item = HaohaoItem()  # 创建一个HaohaoItem实例来传输保存数据item['title'] = titleitem['href'] = hrefyield item
2.items.py文件代码
# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.htmlimport scrapyclass HaohaoItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()title = scrapy.Field()href = scrapy.Field()
3.pipelines.py文件代码(保存数据到Mongodb、Mysql、Excel中)
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html# useful for handling different item types with a single interface
from itemadapter import ItemAdapter
from pymongo import MongoClient
import openpyxl
import pymysql#保存到mongodb中
class HaohaoPipeline:def __init__(self):self.client = MongoClient('mongodb://localhost:27017/')self.db = self.client['qiangzi']self.collection = self.db['hao123']self.data = []def close_spider(self, spider):if len(self.data) > 0:self._write_to_db()self.client.close()def process_item(self, item, spider):self.data.append({'title': item['title'],'href': item['href'],})if len(self.data) == 100:self._write_to_db()self.data.clear()return itemdef _write_to_db(self):self.collection.insert_many(self.data)self.data.clear()#保存到mysql中
class MysqlPipeline:def __init__(self):self.conn = pymysql.connect(host='localhost',port=3306,user='root',password='789456MLq',db='pachong',charset='utf8mb4')self.cursor = self.conn.cursor()self.data = []def close_spider(self,spider):if len(self.data) > 0:self._writer_to_db()self.conn.close()def process_item(self, item, spider):self.data.append((item['title'],item['href']))if len(self.data) == 100:self._writer_to_db()self.data.clear()return itemdef _writer_to_db(self):self.cursor.executemany('insert into haohao (title,href)''values (%s,%s)',self.data)self.conn.commit()#保存到excel中
class ExcelPipeline:def __init__(self):self.wb = openpyxl.Workbook()self.ws = self.wb.activeself.ws.title = 'haohao'self.ws.append(('title','href'))def open_spider(self,spider):passdef close_spider(self,spider):self.wb.save('haohao.xlsx')def process_item(self,item,spider):self.ws.append((item['title'], item['href']))return item
4.settings.py文件配置

七、运行代码

1.进入相关目录,执行:scrapy crawl haotuijian

2.执行过程

3.执行结果
(1) haohao.excel

(2) Mysql:haohao  (需提前创建表)

(3)Mongodb: hao123

八、知识补充

1.创建main.py文件,并编写代码

2.直接运行main.py文件

3.运行结果与使用指令运行结果相同(只不过运行过程变成了红色,但可以像普通python代码一样可以随时暂停

相关文章:

使用Scrapy 爬取“http://tuijian.hao123.com/”网页中左上角“娱乐”、“体育”、“财经”、“科技”、历史等名称和URL

一、网页信息 二、检查网页,找出目标内容 三、根据网页格式写正常爬虫代码 from bs4 import BeautifulSoup import requestsheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/53…...

2018年认证杯SPSSPRO杯数学建模D题(第二阶段)投篮的最佳出手点全过程文档及程序

2018年认证杯SPSSPRO杯数学建模 D题 投篮的最佳出手点 原题再现: 影响投篮命中率的因素不仅仅有出手角度、球感、出手速度,还有出手点的选择。规范的投篮动作包含两膝微屈、重心落在两脚掌上、下肢蹬地发力、身体随之向前上方伸展、同时抬肘向投篮方向…...

软件资源管理下载系统全新带勋章功能 + Uniapp前端

测试环境:php7.1。ng1.2,MySQL 5.6 常见问题: 配置好登录后转圈圈,检查环境及伪静态以及后台创建好应用 上传图片不了,检查php拓展fileinfo 以及public文件权限 App个人主页随机背景图,在前端uitl文件…...

高性能前端UI库 SolidJS | 超棒 NPM 库

SolidJS是一个声明式的、高效的、编译时优化的JavaScript库,用于构建用户界面。它的核心特点是让你能够编写的代码既接近原生JavaScript,又能够享受到现代响应式框架提供的便利。 SolidJS的设计哲学强调了性能与简洁性。它不使用虚拟DOM(Vir…...

聊聊PowerJob的AliOssService

序 本文主要研究一下PowerJob的AliOssService DFsService tech/powerjob/server/extension/dfs/DFsService.java public interface DFsService {/*** 存储文件* param storeRequest 存储请求* throws IOException 异常*/void store(StoreRequest storeRequest) throws IOEx…...

【VRTK】【Unity】【PICO】PICO项目打包后闪退的根本原因

【背景】 一开始打包运行好好的PICO项目,中途用Preview模式开发了一阵后,再次打包就闪退了。 【分析】 项目设置没有动过,那么可能是Preview开发过程中引入的包导致的问题。 【答案】 千万不要在PICO项目中导入Oculus包。我原本想用一些…...

《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(21)

接前一篇文章:《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(20) 2.4 PCI总线的配置 PCI总线定义了两类配置请求,一个是Type 00h配置请求,另一个是Type 01h配置请求。PCI总线使用这些配置请求…...

大数据前馈神经网络解密:深入理解人工智能的基石

文章目录 大数据前馈神经网络解密:深入理解人工智能的基石一、前馈神经网络概述什么是前馈神经网络前馈神经网络的工作原理应用场景及优缺点 二、前馈神经网络的基本结构输入层、隐藏层和输出层激活函数的选择与作用网络权重和偏置 三、前馈神经网络的训练方法损失函…...

【新书推荐】Web3.0应用开发实战(从Web 2.0到Web 3.0)

第一部分 Flask简介 第1章 安装 1.1 创建应用目录 1.2 虚拟环境 1.2.1 创建虚拟环境 1.2.2 使用虚拟环境 1.3 使用pip安装Python包 1.4 使用pipregs输出包 1.5 使用requirements.txt 1.6 使用pipenv管理包 第2章 应用的基本结构 2.1 网页显示过程 2.2 初始化 2.3 路由和视图函数…...

vue3中状态管理库pinia的安装和使用方法介绍及和vuex的区别

文章目录 Pinia 的主要特点:如何使用:1.安装2.定义3.使用 pinia和vuex的对比 Pinia 与 Vuex 一样,是作为 Vue 的“状态存储库”,用来实现 跨页面/组件 形式的数据状态共享。它允许你跨组件或页面共享状态。如果你熟悉组合式 API 的…...

领略指针之妙

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…...

迭代器模式介绍

目录 一、迭代器模式介绍 1.1 迭代器模式定义 1.2 迭代器模式原理 1.2.1 迭代器模式类图 1.2.2 模式角色说明 1.2.3 示例代码 二、迭代模式的应用 2.1 需求说明 2.2 需求实现 2.2.1 抽象迭代类 2.2.2 抽象集合类 2.2.3 主题类 2.2.4 具体迭代类 2.2.5 具体集合类 …...

算法每日一题: 最大字符串匹配数目 | 哈希 | 哈希表 | 题意分析

hello 大家好,我是星恒 今天给大家带来的是hash,思路有好几种,需要注意的是这中简单的题目需要仔细看条件,往往他们有对应题目的特殊的解法 题目:leetcode 2744给你一个下标从 0 开始的数组 words ,数组中包…...

自然语言处理(Natural Language Processing,NLP)解密

专栏集锦,大佬们可以收藏以备不时之需: Spring Cloud 专栏:http://t.csdnimg.cn/WDmJ9 Python 专栏:http://t.csdnimg.cn/hMwPR Redis 专栏:http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏:http://t.csdni…...

【DevOps-08-5】目标服务器准备脚本,并基于Harbor的最终部署

一、简要描述 告知目标服务器拉取哪个镜像判断当前服务器是否正在运行容器,停止并删除如果目标服务器已经存在当前镜像,删除当前版本的镜像目标服务器拉取Harbor上的镜像将拉取下来的镜像运行成容器二、准备目标服务器脚本文件 1、在部署的目标服务器准备deploy.sh部署脚本 …...

用Java实现01背包问题 用贪心算法

贪心算法不是解决01背包问题的有效方法,因为贪心算法只能保证得到一个近似最优解,而无法保证得到最优解。因此,我们需要使用动态规划来解决01背包问题。以下是使用Java实现的动态规划解法: public class KnapsackProblem {public…...

JUC并发编程-8锁现象

5. 8锁现象 如何判断锁的是谁!锁到底锁的是谁? 锁会锁住:对象、Class 深刻理解我们的锁 问题1 两个同步方法,先执行发短信还是打电话 public class dome01 {public static void main(String[] args) {Phone phone new Phon…...

集美大学“第15届蓝桥杯大赛(软件类)“校内选拔赛 D矩阵选数

经典的状态压缩DP int dp[15][(1<<14)10]; int a[15][15]; void solve() {//dp[i][st]考虑到了第i行 并且当前考虑完第i行以后的选择状态是st的所有方案中的最大值for(int i1;i<13;i)for(int j1;j<13;j)cin>>a[i][j];for(int i1;i<13;i){for(int j0;j<…...

Android System Service系统服务--1

因为工作中经常需要解决一些framework层的问题&#xff0c;而framework层功能一般都是system service 的代理stub&#xff0c;然后封装相关接口&#xff0c;并提供给APP层使用&#xff0c;system service则在不同的进程中运行&#xff0c;这样实现了分层&#xff0c;隔离&#…...

【RT-DETR有效改进】华为 | Ghostnetv1一种专为移动端设计的特征提取网络

前言 大家好&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持ResNet32、ResNet101和PP…...

旧电脑秒变云服务器:用Proxmox VE打造家庭虚拟化实验室(ZFS配置优化版)

旧电脑秒变云服务器&#xff1a;用Proxmox VE打造家庭虚拟化实验室&#xff08;ZFS配置优化版&#xff09; 1. 为什么选择Proxmox VE搭建家庭实验室&#xff1f; 对于个人开发者和技术爱好者来说&#xff0c;拥有一套完整的虚拟化环境是提升技术能力的绝佳途径。Proxmox VE作为…...

15天深度体验:micro编辑器状态栏系统监控完全指南

15天深度体验&#xff1a;micro编辑器状态栏系统监控完全指南 【免费下载链接】micro A modern and intuitive terminal-based text editor 项目地址: https://gitcode.com/gh_mirrors/mi/micro micro编辑器是一款现代化的终端文本编辑器&#xff0c;以其直观易用和高度…...

Squeezer安全最佳实践:保护区块链dApp的10个关键点

Squeezer安全最佳实践&#xff1a;保护区块链dApp的10个关键点 【免费下载链接】squeezer Squeezer Framework - Build serverless dApps 项目地址: https://gitcode.com/gh_mirrors/sq/squeezer Squeezer Framework作为构建无服务器区块链去中心化应用&#xff08;dApp…...

家庭实验室:树莓派控制OpenClaw调用远程Qwen3-32B

家庭实验室&#xff1a;树莓派控制OpenClaw调用远程Qwen3-32B 1. 为什么选择树莓派OpenClaw组合 去年冬天&#xff0c;我在整理家庭实验室设备时发现一个闲置的树莓派4B。这台信用卡大小的电脑曾经用来跑Home Assistant控制智能家居&#xff0c;但后来换了NUC主机就被束之高阁…...

05-OpenClaw 自动生成 PPT 实战:每天节省 3 小时

作者&#xff1a;程序员小明儿 字数&#xff1a;约 9000 字 阅读时间&#xff1a;约 25 分钟 难度&#xff1a;⭐⭐⭐ 中级 系列&#xff1a;OpenClaw 实战 16 例&#xff08;第 5 篇&#xff09; 前置条件&#xff1a;已完成 OpenClaw 环境部署和基础配置写在前面 你是不是也这…...

leOS2:基于看门狗定时器的轻量级嵌入式调度器

1. leOS2&#xff1a;基于看门狗定时器的轻量级嵌入式调度器 leOS2&#xff08;little embedded Operating System 2&#xff09;是一个专为资源受限的8位AVR微控制器设计的极简实时调度器。它不依赖于通用定时器&#xff08;如Timer0/Timer1&#xff09;&#xff0c;而是创造…...

CAD_Sketcher终极指南:如何在Blender中实现精准约束绘图

CAD_Sketcher终极指南&#xff1a;如何在Blender中实现精准约束绘图 【免费下载链接】CAD_Sketcher Constraint-based geometry sketcher for blender 项目地址: https://gitcode.com/gh_mirrors/ca/CAD_Sketcher 你是否曾在Blender中尝试绘制精确的机械零件或建筑平面图…...

用Python代码和蒙特卡洛方法,手把手教你估算强化学习中的状态价值(附完整代码)

用Python实现蒙特卡洛方法估算强化学习状态价值的实战指南 马尔可夫决策过程&#xff08;MDP&#xff09;是强化学习的数学基础框架&#xff0c;而状态价值函数则是评估策略优劣的核心指标。许多初学者在理解抽象的状态价值概念时会遇到困难——这些数字究竟是如何从实际交互中…...

28:L构建AI Agent安全:蓝队的智能代理防御

作者&#xff1a; HOS(安全风信子) 日期&#xff1a; 2026-03-19 主要来源平台&#xff1a; GitHub 摘要&#xff1a; AI Agent的发展为安全防御带来了新的可能性&#xff0c;但也带来了新的安全挑战。基拉等对手可能利用AI Agent进行攻击。L深入研究AI Agent安全技术&#xff…...

【实战指南】SVN SSL协议不兼容问题:从TLS版本冲突到降级解决方案

1. 当SVN遇上SSL&#xff1a;TLS协议冲突的典型症状 最近在帮团队排查SVN代码拉取问题时&#xff0c;遇到了一个经典的错误提示&#xff1a;"error running context: an error occurred during ssl communication"。这个看似简单的报错背后&#xff0c;其实是现代加密…...