豌豆Ai站群搜索引擎系统 V.25.10.25 网址:www.wd.chat

🗣 Wd提问: 爬虫源码mysql存储

🤖 Ai回答:
Python爬虫源码:MySQL存储实现

下面是一个完整的Python爬虫示例,将爬取的数据存储到MySQL数据库。这个示例使用了`requests`、`BeautifulSoup`进行爬取,`pymysql`进行数据库操作。

1、环境准备

首先安装必要的库:
bash
pip install requests beautifulsoup4 pymysql

2、MySQL数据库设置

创建数据库和表的SQL脚本:

sql
CREATE DATABASE IF NOT EXISTS spider_db;
USE spider_db;

CREATE TABLE IF NOT EXISTS news (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
url VARCHAR(512) NOT NULL,
summary TEXT,
crawled_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

3、爬虫源码

python
import requests
from bs4 import BeautifulSoup
import pymysql
import time
import logging
from urllib.parse import urljoin

配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(levelname)s %(message)s',
filename='spider.log'
)

class NewsSpider:
def __init__(self, db_config):

初始化爬虫
:param db_config: 数据库配置字典

self.db_config = db_config
self.conn = None
self.cursor = None
self.base_url = https://65.hk 替换为目标网站的根URL

def connect_db(self):
连接到MySQL数据库
try:
self.conn = pymysql.connect(
host=self.db_config['host'],
port=self.db_config['port'],
user=self.db_config['user'],
password=self.db_config['password'],
database=self.db_config['database'],
charset='utf8mb4'
)
self.cursor = self.conn.cursor()
logging.info(数据库连接成功)
except Exception as e:
logging.error(f数据库连接失败: {str(e)})
raise

def close_db(self):
关闭数据库连接
if self.cursor:
self.cursor.close()
if self.conn:
self.conn.close()
logging.info(数据库连接已关闭)

def create_table(self):
创建数据表(如果不存在)
create_table_sql =
CREATE TABLE IF NOT EXISTS news (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
url VARCHAR(512) NOT NULL,
summary TEXT,
crawled_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)

try:
self.cursor.execute(create_table_sql)
self.conn.commit()
logging.info(数据表创建成功或已存在)
except Exception as e:
logging.error(f创建数据表失败: {str(e)})
raise

def insert_news(self, title, url, summary):
插入新闻数据到数据库
insert_sql =
INSERT INTO news (title, url, summary)
VALUES (%s, %s, %s)

try:
self.cursor.execute(insert_sql, (title, url, summary))
self.conn.commit()
logging.info(f成功插入新闻: {title})
except Exception as e:
logging.error(f插入数据失败: {str(e)})
self.conn.rollback()

def get_news_list(self):
从目标网站获取新闻列表
try:
发送请求获取页面
response = requests.get(
self.base_url + /news,
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'}
)
response.encoding = 'utf-8'

if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')

根据实际网页结构调整选择器
以下为示例,需要根据目标网站调整
news_items = soup.select('.news-item')

news_list = []
for item in news_items:
提取标题
title_tag = item.select_one('.news-title')
title = title_tag.text.strip() if title_tag else 无标题

提取链接(可能是相对路径,需要转换为绝对路径)
link_tag = item.select_one('.news-title')
url = urljoin(self.base_url, link_tag['href']) if link_tag and 'href' in link_tag.attrs else

提取摘要
summary_tag = item.select_one('.news-summary')
summary = summary_tag.text.strip() if summary_tag else 无摘要

news_list.append({
'title': title,
'url': url,
'summary': summary
})

return news_list
else:
logging.error(f请求失败,状态码: {response.status_code})
return []

except Exception as e:
logging.error(f获取新闻列表出错: {str(e)})
return []

def crawl(self):
执行爬虫任务
logging.info(开始爬取新闻...)
try:
news_list = self.get_news_list()
for news in news_list:
self.insert_news(news['title'], news['url'], news['summary'])
添加请求间隔,避免对目标网站造成过大压力
time.sleep(1)
logging.info(f成功爬取 {len(news_list)} 条新闻)
except Exception as e:
logging.error(f爬虫执行出错: {str(e)})
raise

def run(self):
运行爬虫
try:
self.connect_db()
self.create_table()
self.crawl()
finally:
self.close_db()

if __name__ == __main__:
配置数据库信息
db_config = {
'host': 'localhost',
'port': 3306,
'user': 'root', 替换为你的MySQL用户名
'password': 'your_password', 替换为你的MySQL密码
'database': 'spider_db'
}

创建并运行爬虫
spider = NewsSpider(db_config)
spider.run()

4、使用说明

1、修改数据库配置:
将`db_config`中的`user`、`password`替换为你的MySQL实际配置

2、调整目标网站:
修改`base_url`为要爬取的网站根URL
根据目标网站的HTML结构调整`get_news_list`中的选择器(`.news-item`、`.news-title`等)

3、运行爬虫:
bash
python spider.py


4、查看日志:
爬虫会生成`spider.log`文件,记录详细执行过程

5、重要注意事项

1、遵守robots.txt:
在爬取前,先查看目标网站的`robots.txt`文件,确保爬取行为符合网站规定
例如:`https://65.hk/robots.txt`

2、请求间隔:
代码中设置了`time.sleep(1)`,避免爬取过于频繁
根据目标网站的承受能力调整间隔时间

3、错误处理:
代码包含了基本的错误处理和日志记录
对于生产环境,建议添加更完善的异常处理和重试机制

4、数据存储:
使用参数化查询防止SQL注入
使用`utf8mb4`字符集支持存储表情符号

6、扩展建议

1、分页爬取:
如果网站有分页,需要添加分页处理逻辑

2、代理IP:
对于需要IP轮换的网站,可以添加代理IP池

3、多线程/异步:
对于大规模爬取,可以考虑使用多线程或异步IO提高效率

4、数据去重:
添加检查重复URL的逻辑,避免重复存储

5、进度跟踪:
添加爬取进度显示,方便监控

7、针对特定网站的调整

如果要爬取其他网站,需要根据其HTML结构调整以下部分:

python
在get_news_list方法中调整选择器
news_items = soup.select('.news-item') 需要根据实际网站调整

提取标题
title_tag = item.select_one('.news-title') 需要根据实际网站调整

提取链接
link_tag = item.select_one('.news-title')
url = urljoin(self.base_url, link_tag['href']) 修正相对URL

请根据目标网站的实际HTML结构修改这些选择器。

这个示例提供了一个完整的爬虫框架,你可以根据实际需求进行调整和扩展。记住,爬取网络数据时务必遵守法律和道德规范,尊重网站的爬取规则。

Ai作答

📣 商家广告


豌豆Ai站群搜索引擎系统

广告招商

广告招商

广告招商

求名


0

IP地址: 249.171.111.41

搜索次数: 0

提问时间: 2025-11-11 06:24:08

🛒 域名购买
53.biz
05.gold
219.net.cn
cisou.com.cn
dk.gs
t-v.com.cn
chang.net.cn
6.hn.cn
lr.gs
ff.biz

❓️ 热门提问
长沙学习云计算培训
香港染发剂哪个牌子好吗
南昌vps
网站优化谷歌
docker是云计算吗
php 文件上传 413 错误
拨号服务器的搭建
瑜伽馆源码定制
河南云主机
vps免备案服务器搭建lnmp
豌豆Ai站群搜索引擎系统

🌐 域名评估
kimi.beauty
yd.cq.cn
5.hi.cn
an.cq.cn
vv.xz.cn
yu7.sn.cn
su.tw.cn
vpkr.cn
yu7.jl.cn
uu.ah.cn

⛏ 最新挖掘
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜

🖌 热门作画

🤝 关于我们:
豌豆Ai 域名 建站 站群 留痕 推广 评估 源码
开发Ai 工具 日记 价格 加盟 广告 流量 留言 联系

🗨 加入群聊
群

🔗 友情链接
検索エンジンの開発  货淋室价格  ai提问

🧰 站长工具
Ai工具  whois查询  搜索

📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。

👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。

上一篇 87205 87206 87207 下一篇