Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从网站中提取大量数据_Python - Fatal编程技术网

Python 从网站中提取大量数据

Python 从网站中提取大量数据,python,Python,我试图从一个网站中提取大量数据。()我正在进行一个数据可视化项目,以显示有关感恩死音乐会的信息。我已经成功地提取并格式化了所需的数据,但过程非常缓慢。我使用urllib库打开并读取每个url。(有数百个URL)。有更好的方法吗 class Song: def __init__(self, name, year): self.name = name self.year = year def printName(self): print

我试图从一个网站中提取大量数据。()我正在进行一个数据可视化项目,以显示有关感恩死音乐会的信息。我已经成功地提取并格式化了所需的数据,但过程非常缓慢。我使用urllib库打开并读取每个url。(有数百个URL)。有更好的方法吗

class Song:
    def __init__(self, name, year):
        self.name = name
        self.year = year
    def printName(self):
        print(self.name)
    def getName(self):
        return self.name

class Year:
    def __init__(self, year, dct):
        self.year = year
        self.dct = {}
    def addSong(self, song):
        if song in self.dct:
            self.dct[song] += 1
        else:
            self.dct[song] = 1

    def printDict(self):
        print(dct)

    def printYear(self):
        print(self.year)

    def getYear(self):
        return self.year




from bs4 import BeautifulSoup
import re
from urllib.request import urlopen
import urllib

songlist = []

def hasNumbers(inputString):
    return any(char.isdigit() for char in inputString)

def remove_values_from_list(the_list, val):
   return [value for value in the_list if value != val]

list_open = open("concert_list.txt")
read_list = list_open.read()
line_in_list = read_list.split("\n")

#empty dictionary
yeardict = {}

#populate dictionary with Year objects from 1972-1995
for i in range(0,24):
    yeardict[i+72] = Year(i+72, {})

# for each website located in concert_list.txt
for url in line_in_list:
    soup = BeautifulSoup(urlopen(url).read(), 'html.parser')
    newurl = []
    # find each link extension
    for link in soup.find_all('a'):
        newurl.append('https://www.cs.cmu.edu/~mleone/gdead/' + link.get('href'))

        # parse through each full url
        for url in newurl:
            soup = BeautifulSoup(urlopen(url).read(), 'html')
            # parse something special in the file
            paragraphs = soup.find_all('p')
            x = []
            # populate x by splitting the file into a list
            for p in paragraphs:
                x = p.getText().split('\n')

        # remove blanks from song list
        x = remove_values_from_list(x, '')

        # for each song in the song list
        for song in x:
            if(hasNumbers(song)):
                year = song[song.rfind("/")+1:song.rfind("/")+3]
            else:
                cursong = Song(song,year)
                #yeardict[int(year)].printYear()
                yeardict[int(year)].addSong(cursong.getName())



print(yeardict[72].dct["Truckin'"]) #song name   

欢迎来到堆栈溢出!这是一个非常深刻的问题…对于目前这个网站来说,这个问题太广泛了。我怀疑
urllib
库是造成您速度缓慢的主要原因。相反,还有许多其他因素可能决定代码的速度慢以及如何提高其性能。但是,由于您没有提供任何信息或代码来说明您正在做什么,因此任何人都无法对您的问题提供简洁的答案。第一步是使用代码分析工具或仅使用一些打印语句和时间计算来分析您的代码,以确定所有时间都将流向何处。我的主要问题是,时间是如何分配的:1)将正在处理的数据存入内存,2)自行处理,3)存储处理结果。我从这里开始…找出问题真正在于你的整体解决方案。嗨,史蒂夫,谢谢你的快速回复。我已经添加了要查看的代码,所以如果您看到任何明显低效的代码,请告诉我。我将自己开始分析代码,试图缩小问题的范围。你能在列表中发布一些
line\u的值作为示例吗?现在它只包含,这是一个url,包含1972年所有节目的名称和链接。稍后我会将其更改为主页链接,其中包含每年的节目链接。欢迎使用Stack Overflow!这是一个非常深刻的问题…对于目前这个网站来说,这个问题太广泛了。我怀疑
urllib
库是造成您速度缓慢的主要原因。相反,还有许多其他因素可能决定代码的速度慢以及如何提高其性能。但是,由于您没有提供任何信息或代码来说明您正在做什么,因此任何人都无法对您的问题提供简洁的答案。第一步是使用代码分析工具或仅使用一些打印语句和时间计算来分析您的代码,以确定所有时间都将流向何处。我的主要问题是,时间是如何分配的:1)将正在处理的数据存入内存,2)自行处理,3)存储处理结果。我从这里开始…找出问题真正在于你的整体解决方案。嗨,史蒂夫,谢谢你的快速回复。我已经添加了要查看的代码,所以如果您看到任何明显低效的代码,请告诉我。我将自己开始分析代码,试图缩小问题的范围。你能在列表中发布一些
line\u的值作为示例吗?现在它只包含,这是一个url,包含1972年所有节目的名称和链接。稍后,我会将其更改为主页链接,其中包含每年的节目链接。