Immortal463 2023-02-24 21:28 采纳率: 37.5%
浏览 54
已结题

python爬虫运行没有结果的问题

python爬虫
http://vip.stock.finance.sina.com.cn/fund_center/index.html#hbphall
抓取所有基金的信息

我先写了基金代码的一部分,但是运行后没有结果,想要问问是什么问题

import requests
from bs4 import BeautifulSoup
import time
import random
import re
import pandas as pd
import matplotlib.pyplot as plt


class Jijin:
    def __init__(self):
        self.URL = "http://vip.stock.finance.sina.com.cn/fund_center/index.html#hbphall"
        self.startnum = [i for i in range(0, 11652, 40)]
        self.header = {
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'}

    def getinf(self):
        self.num = []
        # self.name = []
        # self.unitvalue = []
        # self.totalvalue = []
        # self.performance1 = []
        # self.performance2 = []
        # self.performance3 = []
        # self.performance4 = []
        # self.performance5 = []

        for start in self.startnum:
            time.sleep(random.randint(1, 5))  # 伪装成人为随机时间点击
            html = requests.get(self.URL, params={"start": str(start)}, headers=self.header)
            soup = BeautifulSoup(html.text, "html.parser")

            nums = soup.select(
                '#divHBPH.p_r > div.relative_outer > div#cHBPH.fundTab.table.fblue > table > tbody > tr.red > td.colorize > a')
            #             names =
            #             unitvalues =
            #             totalvalues =
            #             performance1s =
            #             performance2s =
            #             performance3s =
            #             performance4s =
            #             performance5s =
            for numi in nums:
                self.num.append(numi.text)
        print(self.num)
        self.result = pd.DataFrame(zip(self.num))
        # 没有返回结果

    def print_result(self):
        # print('*'*60)
        pd.set_option('display.max_rows', None)  # 显示pandas所有行
        return self.result
        # 返回一个结果

    pass


if __name__ == '__main__':
    cls = Jijin()
    cls.getinf()
    cls.print_result()

  • 写回答

3条回答 默认 最新

  • cjh4312 2023-02-24 21:55
    关注

    给你起个头,其它比较容易,一次请求了5000个,多了好像不行,试了9000个都可以,可以分两次

    
    url="http://vip.stock.finance.sina.com.cn/fund_center/data/jsonp.php/IO.XSRV2.CallbackList['32sd$CbNssSUuKmO']/NetValueReturn_Service.NetValueReturnOpen?page=1&num=5000&sort=form_year&asc=0&ccode=&type2=0&type3="
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
    }
    dd=requests.get(url,headers).text
    df=re.findall(r'{"total_num".*}',dd)[0]
    data=pd.DataFrame(json.loads(df)['data'])
    

    img

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

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月1日
  • 已采纳回答 2月26日
  • 创建了问题 2月24日

悬赏问题

  • ¥30 gradle环境下javafx项目如何使用druid连接池
  • ¥15 服务器打印水晶报表问题
  • ¥15 初学者用plt报错,求解答
  • ¥18 深度学习tensorflow1,ssdv1,coco数据集训练一个模型
  • ¥100 关于注册表摄像头和麦克风的问题
  • ¥30 代码本地运行正常,但是TOMCAT部署时闪退
  • ¥15 关于#python#的问题
  • ¥15 主机可以ping通路由器但是连不上网怎么办
  • ¥15 数据库一张以时间排好序的表中,找出多次相邻的那些行
  • ¥50 关于DynamoRIO处理多线程程序时候的问题