3-referer爬取上交证券数据

3-referer爬取上交证券数据

1.重要步骤

查找内容,发现位于js响应中
在这里插入图片描述

可以使用工具查看js response内容
在这里插入图片描述

从header获取动态网页的请求来源
在这里插入图片描述

2.完整代码

import requests as req
import re
import csv
import pymysql
from lxml import etree
import json

class SSESpider(object):
    """爬取上交所证券数据"""
    def __init__(self):
        self.data = dict()
        self.crawl_result = ""
        self.parse_result = dict()
    
    def crawl(self, start):
        
        """ 需要的response 在JS中"""
        url = "http://query.sse.com.cn/security/stock/getStockListData2.do?&jsonCallBack=jsonpCallback15988&isPagination=true&stockCode=&csrcCode=&areaName=&stockType=1&pageHelp.cacheSize=1&pageHelp.beginPage={}&pageHelp.pageSize=25&pageHelp.pageNo=1&_=1624950555991".format(start)
#         print(url)
        headers = {
            "Referer": "http://www.sse.com.cn/",
            "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"
        }
        
        resp = req.get(url, headers=headers)
        content = resp.content.decode("utf-8")
        print("content type:", type(content))
        return content

        pass
    
    def parse(self, content):
        """ 解析数据 """
        # 可使用工具查看json内容解析
        
        result = re.match(r'.*?\((.*?)\)', content).group(1)
        dict_all = json.loads(result, encoding='utf-8')
        return dict_all["result"]
    
    def savejson(self, dict_data):
        """ 将字典写入.json文件"""
        if len(dict_data) > 0:
            with open("stocks.json", "a", encoding="utf-8", newline="") as fd:
                json.dump(dict_data, fd, indent=2, ensure_ascii=False)
        pass
        
        
    def start(self):
        """启动爬虫"""
        spider = SSESpider()
        dict_all = {"data": []}
        
        for i in range(1, 1000):
            crawl_rst = spider.crawl(i)
            print(crawl_rst, "\n\n")
            parse_rst = spider.parse(crawl_rst)
            if len(parse_rst) == 0:
                break
            dict_all['data'].extend(parse_rst)    
            self.savejson(dict_all)
            
            pass
        
        pass
            
            
if __name__ == "__main__":
	spider = SSESpider()
	spider.start()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值