Python_爬虫数据存入数据库(超详细过程

article/2025/9/4 22:50:23

目录

 

 

一、新建项目

二、程序的编写

三、数据的爬取


 

一、新建项目

1.在cmd窗口输入scrapy startproject [项目名称] 创建爬虫项目

7443f9f72e5449b389469711900ba432.png

 

接着创建爬虫文件,scrapy genspider [爬虫名字] [爬虫域名]

6a1c434f3fd046e191dbd7d9cc37d5f2.png

 

打开pycharm项目,就可以看到生成的cblog.py文件

8903421bb6514fa7b4b65ecaf1750ae2.png

 

二、程序的编写

1.在项目下新建main.py,写入以下代码,方便后续项目调试

main.py

from scrapy.cmdline import executeimport sys
import ossys.path.append(os.path.dirname(os.path.abspath(__file__)))execute(["scrapy", "crawl", "kblog"])

 

2.编写爬虫程序

kblog.py

import scrapy
from urllib import parse
import re
import json
import scrapy
import requests
from scrapy import Request
from scrapy import Selectorfrom urllib import parse
from scrapy import Request
from MySpider.utils import common
from MySpider.items import KBlogArticleItemclass KblogSpider(scrapy.Spider):name = 'kblog'allowed_domains = ['kb.cnblogs.com']start_urls = ['http://kb.cnblogs.com/']# 解析每个网页的urldef parse(self, response):post_nodes = response.xpath('//*[@id="wrapper"]/div[4]/div/div[2]/div')[1:20]   # 解析该网页的list_url[1:20]for post_node in post_nodes:    # 遍历解析urlpost_url = post_node.xpath('./div/div[1]/p/a/@href').extract_first("")yield Request(url=parse.urljoin(response.url, post_url),    # 通过yield把每个url保存到生成器,再通过callback方法,将每个url传入parse_detail()函数进行数据解析callback=self.parse_detail)# 解析每个url的详细数据def parse_detail(self, response):article_item = KBlogArticleItem()  # 实例化items# 解析数据title = response.xpath('//*[@id="left_content_pages"]/h1/a/text()').extract_first("") # 标题a = response.xpath('//*[@id="left_content_pages"]/div[1]//text()').extract()a = "".join(a)a = re.findall(r"(\d+)-(\d+)-(\d+)", a)create_date = "-".join(a[0])  # 发布时间content = response.xpath('//*[@id="left_content_pages"]/div[2]//text()').extract() # 内容tag_list = response.xpath('//*[@id="panelTags"]/div//a/text()').extract()tags = ",".join(tag_list) # 标签# 存入item对象中article_item['title'] = titlearticle_item['create_date'] = create_datearticle_item['content'] = contentarticle_item['tags'] = tagsarticle_item['url'] = response.urlarticle_item['url_object_id'] = common.get_md5(article_item["url"])yield article_item

 

3.在items.py文件中创建items函数与爬取数据对应

items.py

import scrapyclass KBlogArticleItem(scrapy.Item):title = scrapy.Field()create_date = scrapy.Field()url = scrapy.Field()url_object_id = scrapy.Field()tags = scrapy.Field()content = scrapy.Field()pass

 

4.在数据库中新建数据表MyArticle,数据表列名属性与爬取的数据对应

 MyArticle.sql

3399b5b93af24b459a2216f7956d6f78.png

5.在pipelines.py中新建数据库函数,用于保存数据到数据库

pipelines.py

import MySQLdbclass MysqlPipeline(object):def __init__(self):# 连接数据库self.conn = MySQLdb.connect(host="192.168.186.130", user="root", password="123456", database="article_spider", charset='utf8', use_unicode=True)self.cursor = self.conn.cursor()def process_item(self, item, spider):# 数据库插入语句insert_sql = """insert into MyArticle(title,url,tags,create_date,content)values(%s,%s,%s,%s,%s)"""# 数据参数列表parms = list()parms.append(item.get('title', ""))parms.append(item.get('url', ""))# parms.append(item.get('url_object_id', ""))parms.append(item.get('tags', ""))parms.append(item.get('create_date', "1970-07-01"))content = "".join([str(x) for x in (item.get('content', ""))])parms.append(content.lstrip())# 执行数据库语句,将数据存入SQL数据库中self.cursor.execute(insert_sql, tuple(parms))self.conn.commit()return item

6.在setting中添加pipelines中的数据库函数,并将robot协议关闭

setting.py

ROBOTSTXT_OBEY = FalseITEM_PIPELINES = {'MySpider.pipelines.MysqlPipeline': 1,'MySpider.pipelines.MyspiderPipeline': 300,
}

 

三、数据的爬取

在main函数运行该项目,最终爬取的数据将保存到SQL数据库上。

03a94dfecdc04dea9019336db6ee7dbe.png

 


http://chatgpt.dhexx.cn/article/PH0jxYUj.shtml

相关文章

爬虫抓取分页数据的简单实现

爬虫抓取分页数据的简单实现 昨天,我们已经利用Jsoup技术实现了一个简单的爬虫,原理很简单,主要是要先分析页面,拿到条件,然后就去匹配url,采用dome解析的方式循环抓取我们需要的数据,从而即可轻…

PHP爬虫抓取网页数据

2019年我接触到PHP爬虫的时候,我最开始是懵的。还有人用php来写爬虫? 一个月之后,嗯~全世界最好的语言写全世界最好的爬虫,真香!而在7月15这一个日常加班的晚上,做完手头的活,我寻思着写会儿php…

网络爬虫的基本结构是什么?如何建立网络爬虫抓取数据?

摘要:互联网上有很多丰富的信息可以被抓取并转换成有价值的数据集,然后用于不同的行业。比如企业用户利用电商平台数据进行商业分析,学校的师生利用网络数据进行科研分析等等。那么,除了一些公司提供的一些官方公开数据集之外&…

利用EXCEL进行数据爬虫

说到爬虫,相信大家出现在脑海中的一定是python。python在最近几年确实热火朝天,对于不会编程人员来说,利用好EXCEL一样也可以爬取一些简单的数据,并且方式非常简单。 1.爬取东方财富网上基金信息。网址为:基金收益排行…

利用Excel数据爬虫

1、在Excel里数据里打开自网站。 2、选择高级部分 URL部分和URL预览填写为目标(需要爬取数据的网址)的URL地址 命令超时选择1分钟即可。 HTTP请求标头参数 第一步点击网络 第二部点击消息头部 第三部找到User-Agent的value复制 3、最后点击加载 就…

爬虫抓取网络数据时经常遇到的六种问题

随着互联网时代的不断发展,爬虫采集已经成为了目前最为主流的数据获取方式。使用爬虫软件自动从网站中提取数据可以节省大量的时间和精力。接下来就一起来看看爬虫抓取网络数据时经常遇到的六种问题吧: 1.IP阻止 IP阻止是指网站所有者主动阻止用户的IP地…

Jsoup实现网络爬虫抓取数据

Jsoup实现网络爬虫抓取数据 在编写一个软件,例如关于教务软件的时候,需要获取学校官网的一些新闻信息来充实自己的软件,而又不会专门提供相关的api接口,此时就需要我们自己动手来抓取感兴趣的信息。有人会问抓取网站的信息是否会…

Java爬虫,数据采集经验分享

公司要求我采集网页中的某些数据,以下是我采集的步骤和思路,比较基础。 一.首先我是通过抓取网页源代码的方式,根据源代码,获取各种标签中的数据 public class GetData {//数据抓取核心类// 获取网页数据/** param url:目标网址…

Python爬虫抓取数据时怎么防止ip被封

大数据公司在做数据分析的时候,对目标网站频繁访问很容易触发网站的反爬机制,因此如果想要突破限制只能使用动态ip频繁切换地址模拟真实客户访问网站才能起到防封效果。比如在做数据抓取的时候报错403等限制访问,大概率是因为ip被限。本文总结…

爬虫入门——数据抓取

学习爬虫, 最初的操作便是模拟浏览器向服务器发出请求。使用一下库实现此请求 1.urllib库的使用 urllib 库是Python 内置的HTTP 请求库,包含以下四个模块: 1.request:http请求模块 2.error:异常处理模块 3.parse&#…

ts全局变量定义

参照已有全局变量定义 src/global.d.ts /** Author: hongbin* Date: 2022-10-21 08:49:42* LastEditors: hongbin* LastEditTime: 2022-10-21 09:09:08* Description:全局类型,变量,常量*/ //全局变量 declare let Hong: string; declare const BIN: s…

C++中的全局变量声明和定义

1.全局变量 全局变量在整个源文件的作用域都是有效的,只需要在一个源文件中定义全局变量,在其他不包含全局变量定义的源文件中用extern关键字再次声明这个全局变量即可。 也可以在一个源文件中定义这个全局变量,在头文件中用extern关键字再…

c语言全局变量(c语言全局变量怎么定义)

菜鸟提问:GCCE编译环境下,汇编函数如何使用C全局变量汇编化了 首先要在C程序中用extern申明该变量为全局变量,再在汇编程序中用extern "变量名"来导入,注意,汇编中如果直接使用"mov eax,变量名"表示的是将该变…

C++全局变量的声明和定义

参考: http://wrchen.blog.sohu.com/71617539.html (1)编译单元(模块) 在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作: 第一步,将每个.cpp(.c…

【Vue】全局变量的定义及使用

首先声明Vue使用全局变量的方法有很多&#xff0c;以下只是个人觉得比较简洁的2种。其中两者的第一步操作相同&#xff0c;即&#xff1a; 创建全局变量文件Global.vue&#xff0c;内容如下&#xff1a; <script>const name ZhangSan; //名称const address No.20, Ta…

VC++中全局变量的问题(转)

全局变量一般这样定义&#xff1a;1。在一类的.cpp中定义 int myInt;然后再在要用到的地方的.cpp里extern int myInt&#xff1b;这样就可以用了。 2。在stdafx.cpp中加入:int myInt;然后在stdafx.h中加入:extern int myInt这样定义以后无论在什么文件中都是可见的. 3。比较规…

LINUX c语言 定时显示CPU,内存和硬盘的使用率

/* 写在完成后&#xff0c;查找了很多资料&#xff0c;看到了很多方法&#xff0c;也看了部分top的源码&#xff0c;最终选择了这几种混合的方式来写&#xff0c;可能有更优解&#xff0c;不过目前这样应该够用。 --2020/12/15-- Simon */需求&#xff1a;定期获取CPU&#x…

crontab做系统定时任务命令

crontab做系统定时任务命令&#xff1a; 给系统设置一个定时的任务&#xff0c;相当于一个闹钟 我们每天的0点去做一些清理工作&#xff0c;自检工作&#xff0c;重要数据存盘备份工作&#xff0c;一个组里面很多同时都在提交代码&#xff0c;git作为代码管理工具&#xff0c;每…

c语言如何让函数一直执行,C语言如何实现在每天某个特定时间执行某个函数?

慕仙森 Windows提供了定时器&#xff0c;帮助编写定期发送消息的程序。定时器一般通过一下两中方式通知应用程序间隔时间已到。⑴ 给指定窗口发送WM_TIMER消息&#xff0c;也就是下面的给出在窗口类中使用的方法。⑵ 调用一个应用程序定义的回调函数&#xff0c;也就是在非窗口…

HashedWheelTimer时间轮定时任务原理分析

一、示例代码 HashedWheelTimer时间轮是一个高性能&#xff0c;低消耗的数据结构&#xff0c;它适合用非准实时&#xff0c;延迟的短平快任务&#xff0c;例如心跳检测。 时间轮是一种非常惊艳的数据结构。其在Linux内核中使用广泛&#xff0c;是Linux内核定时器的实现方法和基…