科创板申报企业信息爬取入库(webdriver+xpath+pymysql)

  1. 目标
    科创板开板以来,申报企业数量不断增加,目前已逾150家,拟通过爬虫获取所有申报企业的基本信息,例如审核状态、省份、行业、保荐机构、律师事务所、会计师事务所、保荐人、签字会计师、签字律师等信息。
  2. 网站分析
    打开http://kcb.sse.com.cn/renewal/ 进入上交所科创板股票发行上市审核项目动态页面,可以看到页面已有比较清晰格式化的信息展示,包括全称、审核状态、行业、保荐机构、律师事务所、会计师事务所、更新日期、受理日期等信息。在这里插入图片描述
    翻页页面url不变,右键网页源代码中也无上述表格中的相关信息,故尝试通过requests获取html不能得到上述表格中相关信息,所以拟采取 selenium 中的webdriver模拟浏览器进行访问
    (webdriver安装可参考https://blog.youkuaiyun.com/Alisen39/article/details/82930220)。
from selenium import webdriver
from lxml import etree
browser = webdriver.Chrome()
browser.get('http://kcb.sse.com.cn/renewal/') # page_source获取网页的源代码,然后可以使用正则表达式,css,xpath,bs4等来解析网页
html = etree.HTML(browser.page_source)  #得到html
  1. 页面解析元素提取
    在F12中通过定位相关字段,右键查看xpath获取目标元素的路径
    在这里插入图片描述
    定义函数 pagedataget(html),以提取每一页的关键信息,其中部分字段存在换行等情况,不能在一个路径下提取完整,需要加以判断整合。完整代码如下。
'''获取每页的数据'''
def pagedataget(html):
    items = html.xpath('//*[@id="dataList1_container"]/tbody/tr')
    num1=[];issuer_ful1=[];status1=[];province1=[];csrc_ind1=[];compinfourl=[];
    sponsor_org1=[];lawfirm1=[];accountfirm1=[];update1=[];acceptdate1=[];
    issuer_sec1=[];financing_amount1=[];sponsor1=[];accountant1=[];
    lawyer1=[];assessor_org1=[];assessor1=[]
    for item in items :
        num=item.xpath('./td[@class="td_no_break text-align-center"]/text()')
        if num:
            num1.append(num)
        issuer_ful=item.xpath('./td[@class="td_break_word_7 "]/a/text()[1]')
        b=item.xpath('./td[@class="td_break_word_7 "]/a/text()[2]')
        if issuer_ful and b:
            issuer_ful=issuer_ful[0]+b[0]
            issuer_ful1.append(issuer_ful)    
        else:
            if issuer_ful:
                issuer_ful=issuer_ful[0][0:]
                issuer_ful1.append(issuer_ful)    
        url=item.xpath('./td[@class="td_break_word_7 "]/a/@href')
        if url:
        
# # -*- coding: utf-8 -*- # 数据爬取文件 import scrapy import pymysql import pymssql from ..items import ErshoufanginfoItem import time from datetime import datetime,timedelta import datetime as formattime import re import random import platform import json import os import urllib from urllib.parse import urlparse import requests import emoji import numpy as np from DrissionPage import Chromium import pandas as pd from sqlalchemy import create_engine from selenium.webdriver import ChromeOptions, ActionChains from scrapy.http import TextResponse from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait import pandas as pd from sqlalchemy import create_engine from selenium.webdriver import ChromeOptions, ActionChains from scrapy.http import TextResponse from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait # 二手房信息 class ErshoufanginfoSpider(scrapy.Spider): name = 'ershoufanginfoSpider' spiderUrl = 'https://gy.anjuke.com/sale/p{}/' start_urls = spiderUrl.split(";") protocol = '' hostname = '' realtime = False def __init__(self,realtime=False,*args, **kwargs): super().__init__(*args, **kwargs) self.realtime = realtime=='true' def start_requests(self): plat = platform.system().lower() if not self.realtime and (plat == 'linux' or plat == 'windows'): connect = self.db_connect() cursor = connect.cursor() if self.table_exists(cursor, 's6036zs0_ershoufanginfo') == 1: cursor.close() connect.close() self.temp_data() return pageNum = 1 + 1 for url in self.start_urls: if '{}' in url: for page in range(1, pageNum): next_lin用什么库来解析
最新发布
03-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值