У меня есть код, который использует 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("
Какие-либо предложения?
Примечание: Я уже задаю этот вопрос здесь, но это было закрыто из-за неполной информации.
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
и т. Д. методы по результатам.