定制小程序开发Python_爬虫数据存入数据库(超详细过程

目录

 

 


 

一、新建项目

1.定制小程序开发在窗口输入scrapy startproject [项目名称] 定制小程序开发创建爬虫项目

 

定制小程序开发接着创建文件,scrapy genspider [爬虫名字] [爬虫域名]

 

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

 

二、程序的编写

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

main.py

  1. from scrapy.cmdline import execute
  2. import sys
  3. import os
  4. sys.path.append(os.path.dirname(os.path.abspath(__file__)))
  5. execute(["scrapy", "crawl", "kblog"])

 

2.编写爬虫程序

kblog.py

  1. import scrapy
  2. from urllib import parse
  3. import re
  4. import json
  5. import scrapy
  6. import requests
  7. from scrapy import Request
  8. from scrapy import Selector
  9. from urllib import parse
  10. from scrapy import Request
  11. from MySpider.utils import common
  12. from MySpider.items import KBlogArticleItem
  13. class KblogSpider(scrapy.Spider):
  14. name = 'kblog'
  15. allowed_domains = ['kb.cnblogs.com']
  16. start_urls = ['http://kb.cnblogs.com/']
  17. # 解析每个网页的url
  18. def parse(self, response):
  19. post_nodes = response.xpath('//*[@id="wrapper"]/div[4]/div/div[2]/div')[1:20] # 解析该网页的list_url[1:20]
  20. for post_node in post_nodes: # 遍历解析url
  21. post_url = post_node.xpath('./div/div[1]/p/a/@href').extract_first("")
  22. yield Request(url=parse.urljoin(response.url, post_url), # 通过yield把每个url保存到生成器,再通过callback方法,将每个url传入parse_detail()函数进行数据解析
  23. callback=self.parse_detail)
  24. # 解析每个url的详细数据
  25. def parse_detail(self, response):
  26. article_item = KBlogArticleItem() # 实例化items
  27. # 解析数据
  28. title = response.xpath('//*[@id="left_content_pages"]/h1/a/text()').extract_first("") # 标题
  29. a = response.xpath('//*[@id="left_content_pages"]/div[1]//text()').extract()
  30. a = "".join(a)
  31. a = re.findall(r"(\d+)-(\d+)-(\d+)", a)
  32. create_date = "-".join(a[0]) # 发布时间
  33. content = response.xpath('//*[@id="left_content_pages"]/div[2]//text()').extract() # 内容
  34. tag_list = response.xpath('//*[@id="panelTags"]/div//a/text()').extract()
  35. tags = ",".join(tag_list) # 标签
  36. # 存入item对象中
  37. article_item['title'] = title
  38. article_item['create_date'] = create_date
  39. article_item['content'] = content
  40. article_item['tags'] = tags
  41. article_item['url'] = response.url
  42. article_item['url_object_id'] = common.get_md5(article_item["url"])
  43. yield article_item

 

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

items.py

  1. import scrapy
  2. class KBlogArticleItem(scrapy.Item):
  3. title = scrapy.Field()
  4. create_date = scrapy.Field()
  5. url = scrapy.Field()
  6. url_object_id = scrapy.Field()
  7. tags = scrapy.Field()
  8. content = scrapy.Field()
  9. pass

 

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

 MyArticle.sql

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

pipelines.py

  1. import MySQLdb
  2. class MysqlPipeline(object):
  3. def __init__(self):
  4. # 连接数据库
  5. self.conn = MySQLdb.connect(host="192.168.186.130", user="root", password="123456", database="article_spider", charset='utf8', use_unicode=True)
  6. self.cursor = self.conn.cursor()
  7. def process_item(self, item, spider):
  8. # 数据库插入语句
  9. insert_sql = """
  10. insert into MyArticle(title,url,tags,create_date,content)
  11. values(%s,%s,%s,%s,%s)
  12. """
  13. # 数据参数列表
  14. parms = list()
  15. parms.append(item.get('title', ""))
  16. parms.append(item.get('url', ""))
  17. # parms.append(item.get('url_object_id', ""))
  18. parms.append(item.get('tags', ""))
  19. parms.append(item.get('create_date', "1970-07-01"))
  20. content = "".join([str(x) for x in (item.get('content', ""))])
  21. parms.append(content.lstrip())
  22. # 执行数据库语句,将数据存入SQL数据库中
  23. self.cursor.execute(insert_sql, tuple(parms))
  24. self.conn.commit()
  25. return item

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

setting.py

  1. ROBOTSTXT_OBEY = False
  2. ITEM_PIPELINES = {
  3. 'MySpider.pipelines.MysqlPipeline': 1,
  4. 'MySpider.pipelines.MyspiderPipeline': 300,
  5. }

 

三、数据的爬取

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

 

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发