爬去证件会的首次公开发行反馈意见并做词频分析

利用国庆8天假期,从头开始学爬虫,现在分享一下自己项目过程。

技术思路:

1,使用scrapy爬去证监会反馈意见

  • 分析网址特点,并利用scrapy shell测试选择器
  • 加载代理服务器:IP池
  • 模拟浏览器:user-agent
  • 编写pipeitem,将数据写入数据库中

2,安装并配置mysql

  • 安装pymysql
  • 参考mysql手册,建立数据库以及表格

3,利用进行数据分析

  • 使用对反馈意见进行整理
  • 利用jieba库进行分析,制作财务报表专用字典,获取词汇以及其频率
  •  使用pandas分析数据并作图
  • 使用tableau作图

分析思路:

  • 分析公司名字是否含有地域信息
  • 分析反馈意见的主要焦点:财务与法律

核心代码:

  • 爬虫核心代码
# -*- coding: utf-8 -*- import scrapy from scrapy.selector import Selector from fkyj.items import FkyjItem import urllib.request from scrapy.http import HtmlResponse from scrapy.selector import HtmlXPathSelector def gen_url_indexpage():
#证监会的网站是通过javascript生成的,因此网址无法提取,必须是自己生成 pre
= "http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj/index" url_list = [] for i in range(25): if i ==0: url = pre+".html" url_list.append(url) else: url = pre+"_"+str(i)+".html" url_list.append(url) return url_list class Spider1Spider(scrapy.Spider): name = 'spider1' allowed_domains = ['http://www.csrc.gov.cn'] start_urls = gen_url_indexpage() def parse(self, response): item = FkyjItem() page_lst = response.xpath('//ul[@id="myul"]/li/a/@href').extract() name_lst = response.xpath('//ul[@id="myul"]/li/a/@title').extract() date_lst= response.xpath('//ul[@id="myul"]/li/span/text()').extract() for i in range(len(name_lst)): item["name"] = name_lst[i] item["date"] = date_lst[i] url_page = "http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj" +page_lst[i] pre_final = "http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj/" + page_lst[i].split("/")[1] res = Selector(text= urllib.request.urlopen(url_page).read().decode("utf-8")) #给res装上HtmlXPathSelector url_extract = res.xpath("//script").re(r'<a href="(\./P\d+?\.docx?)">|<a href="(\./P\d+?\.pdf)">')[0][1:] url_final = pre_final+ url_extract print ("-"*10,url_final,"-"*10) item["content"] = "" try: file =urllib.request.urlopen(url_final).read() filepath = r"C:\\Users\\tc\\fkyj\\fkyj\\files\\" filetype = url_extract.split(".")[1] with open(filepath+item["name"]+"."+filetype,'wb') as f: f.write(file) except urllib.request.HTTPError: item["content"] = "wrong:HTTPERROR" yield item
这里不足之处在于没有体现针对不同网站书写不同代码,建议建立不同callback函数
建议思路:
parse():正对初始网址
parse_page:针对导航页
parse_item:提取公司名称与日期
parse_doc:提取doc文档


---------------------------------------------------------------------pipeitem代码-------------------------------------------------------------


import pymysql

class FkyjPipeline(object):
def __init__(self):
#连接数据库
self.con = pymysql.connect(host='localhost', port=3306, user='root', passwd="密码",db="数据库名字")
def process_item(self, item, spider):
name = item["name"]
date = item["date"]
content = item["content"]
self.con.query("Insert Into zjh_fkyj.fkyj(name,date_fk,content) Values('" + name + "','" + date + "','"+content+"')")
#必须要提交,否则没用
self.con.commit()
return item

def close_spider(self):
#在运行时关闭数据库
self.con.close()

2,分析用代码–主要部分

一下代码在jupyter notebook上运行

 

原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/31464

(0)
优速盾-小U的头像优速盾-小U
上一篇 2025年6月18日 18:42
下一篇 2025年6月18日 23:04

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

优速盾注册领取大礼包www.cdnb.net
/sitemap.xml