小沐白 2023-02-01 15:25 采纳率: 50%
浏览 77
已结题

python 爬虫并保存到excel文件

问题遇到的现象和发生背景

Python 爬虫

如何将网站 https://www.bse.cn/nq/nqzqlistlgb.html 中地方政府债下显示的内容 和网站 https://www.bse.cn/nq/nqzqlistgb.html 中国债下显示的内容爬虫并保存到excel中?

遇到的现象和发生背景,请写出第一个错误信息

尝试用以下代码,但是生成的excel中只有第一行标题,没有内容

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%

import re
import time
import datetime
import openpyxl
import parsel as parsel

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

url = 'https://www.bse.cn/nq/nqzqlistgb.html'
driver = webdriver.Chrome(executable_path='chromedriver.exe')
driver.get(url=url)

el_search = driver.find_element(by=By.XPATH, value='//*[@id="root"]/div[4]/div/div/div[1]/div[1]/div/div[1]')
# 点击
el_search.click()

time.sleep(3)

html_data = driver.page_source
#print(html_data)
selector = parsel.Selector(html_data)
results = selector.css('#root > div.mw-page > div > div > div.col-sm-12.col-md-9.col-md-push-3 > div.mw-box-content > div').getall()
#print(results)
#print(type(results))
#print(len(results))
len_results = len(results)
if len_results == 1 and results[0] == '':
    print("no result")
else:
    fieldnames = ['序号', '发行代码', '债券简称', '债券全称', '发行量(亿元)', '债券期限', '票面利率(%)', '计息方式', '起息日', '到期日']
    work_book = openpyxl.Workbook()
    work_book.create_sheet()
    work_sheet = work_book.active
    work_sheet.append(fieldnames)
    for page in range(1, 5):
        selector1 = parsel.Selector(driver.page_source)
        results1 = selector1.css('#root > div.mw-page > div > div > div.col-sm-12.col-md-9.col-md-push-3 > div.mw-box-content > div').getall()
        for r in results1[1:-1]:
            row = re.findall(
                '(.*?)(.*?)(.*?)(.*?)(.*?)(.*?)('
                '.*?)(.*?)(.*?)(.*?)(.*?)',
                r)[0]
            print(list(row))
            print(type(row))
            work_sheet.append(list(row))
        time.sleep(3)
        if page < 5:
            driver.find_element(by=By.LINK_TEXT, value='next').click()
            time.sleep(5)
    n = datetime.datetime.now().strftime('%m%d')
    work_book.save(n + '_' + 'BJS_Code_Check' + '.xlsx')
print('file written successfully')

运行结果及详细报错内容
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
  • 写回答

3条回答 默认 最新

  • cjh4312 2023-02-01 17:04
    关注

    我用的edge,你改成chrome应该一样的

    
    import time
    from lxml import etree
    from selenium import webdriver
    import pandas as pd
    from selenium.webdriver.common.by import By
    
    #保存每页数据函数
    def get_page_data(all_data):
        data=[]
        for n,i in enumerate(dd):
            data.append(str(i))
            if (n+1)%10==0:
                all_data.append(data)
                data=[]
                
    url = 'https://www.bse.cn/nq/nqzqlistlgb.html'#地方债卷
    url2='https://www.bse.cn/nq/nqzqlistgb.html'#国债
    driver = webdriver.Edge()
    driver.get(url)#修改url就行
    driver.maximize_window()
    driver.implicitly_wait(10)
    time.sleep(3)
    html=etree.HTML(driver.page_source)
    
    dd=html.xpath('//*[@id="table"]/table/tbody//text()')
    #获取多少页
    pages=html.xpath('//*[@href="javascript:;"]//text()')
    page=0
    for i in pages:
        if str(i).isnumeric():
            page+=1
    
    all_data=[]
    get_page_data(all_data)
    #获取剩下每页数据
    for i in range(page):
        next_click=driver.find_element(By.LINK_TEXT,f'{i+2}')
        next_click.click()
        time.sleep(1)
        html=etree.HTML(driver.page_source)
        dd=html.xpath('//*[@id="table"]/table/tbody//text()')
        get_page_data(all_data)
        time.sleep(2)
    #处理数据保存
    data=pd.DataFrame(all_data)
    data.columns=['序号', '发行代码', '债券简称', '债券全称', '发行量(亿元)', '债券期限', '票面利率(%)', '计息方式', '起息日', '到期日']
    # data.to_excel('e:/地方债.xlsx',index=False)
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月10日
  • 已采纳回答 2月2日
  • 创建了问题 2月1日

悬赏问题

  • ¥50 使用CUDA如何高效的做并行化处理,是否可以多个分段同时进行匹配计算处理?目前数据传输速度有些慢,如何提高速度,使用gdrcopy是否可行?请给出具体意见。
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),如何通过环岛的原理及完整代码
  • ¥20 机器学习或深度学习问题?困扰了我一个世纪,晚来天欲雪,能饮一杯无?
  • ¥15 c语言数据结构高铁订票系统
  • ¥15 关于wkernell.PDB加载的问题,如何解决?(语言-c#|开发工具-vscode)
  • ¥15 (标签-STM32|关键词-智能小车)
  • ¥20 关于#stm32#的问题,请各位专家解答!
  • ¥15 (标签-python)
  • ¥20 搭建awx,试了很多版本都有错
  • ¥15 java corba的客户端该如何指定使用本地某个固定IP去连接服务端?