Оптимизация BeautifulSoup (Python) код

У меня есть код, который использует BeautifulSoup библиотека для парсинга, но это очень медленно. Код написан таким способом, которым не могут использоваться потоки. Кто-либо может помочь мне с этим?

Я использую BeautifulSoup для парсинга и, чем сохраняют в DB. Если я комментирую save оператор, все еще требуется много времени, таким образом, нет никакой проблемы с базой данных.

def parse(self,text):                
    soup = BeautifulSoup(text)
    arr = soup.findAll('tbody')                

    for i in range(0,len(arr)-1):
        data=Data()
        soup2 = BeautifulSoup(str(arr[i]))
        arr2 = soup2.findAll('td')

        c=0
        for j in arr2:                                       
            if str(j).find("

Какие-либо предложения?

Примечание: Я уже задаю этот вопрос здесь, но это было закрыто из-за неполной информации.

5
задан Community 23 May 2017 в 11:51
поделиться

1 ответ

soup2 = BeautifulSoup(str(arr[i]))
arr2 = soup2.findAll('td')

Не делайте этого: вместо этого вызовите arr2 = arr [i] .findAll ('td') .


Это также будет медленным:

if str(j).find("<a href=") > 0:
    data.sourceURL = self.getAttributeValue(str(j),'<a href="')

Предполагая, что getAttributeValue дает вам атрибут href , используйте вместо этого:

a = j.find('a', href=True)       #find first <a> with href attribute
if a:
    data.sourceURL = a['href']
else:
    #....

В общем, вам не нужно преобразовывать объект BeautifulSoup обратно в строка, если все, что вы хотите сделать, это проанализировать ее и извлечь значения. Поскольку методы find и findAll возвращают вам объекты с возможностью поиска, вы можете продолжить поиск, вызвав find / findAll и т. Д. методы по результатам.

6
ответ дан 14 December 2019 в 13:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: