我有使用BeautifulSoup
库进行解析的代码,但速度非常慢。编写代码的方式是不能使用线程。
任何人都可以帮我这个吗?
我正在使用BeautifulSoup
进行解析而不是保存到数据库中。如果我注释掉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("<a href=") > 0:
data.sourceURL = self.getAttributeValue(str(j),'<a href="')
else:
if c == 2:
data.Hits=j.renderContents()
#and few others...
c = c+1
data.save()
有什么建议吗?
注意:我已经问过这个问题here但由于信息不完整而关闭了。
答案 0 :(得分:6)
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
/等继续搜索。关于结果的方法。