我已經投注了一個小時,但顯然我不明白一些事情。有一個任務是用 django 管理面板撰寫一個刮刀,一切都很好,在這里作業。現在我需要將所有資料保存到資料庫中,這是問題所在,django 管理面板中只出現一張照片,但所有內容都下載到了媒體檔案夾中。
# models.py
from django.db import models
class Apartment(models.Model):
rooms = models.CharField('кол-во комнат', max_length=64)
price = models.CharField('цена', max_length=10)
address = models.CharField('Адрес', max_length=256)
desc = models.TextField('описание')
floor = models.CharField('этаж', max_length=5)
def __str__(self):
return self.address
class Meta:
verbose_name = 'квартира'
verbose_name_plural = 'квартиры'
class Image(models.Model):
apartment = models.ForeignKey(Apartment, on_delete=models.CASCADE)
img = models.ImageField(upload_to='media/')
class Meta:
verbose_name = 'фото'
verbose_name_plural = 'фото'
class Url(models.Model):
created = models.DateTimeField(auto_now_add=True)
url = models.URLField('ссылка')
def __str__(self):
return self.url
class Meta:
verbose_name = 'ссылка'
verbose_name_plural = 'ссылки'
ordering = ['-created']
#scraper
@receiver(post_save, sender=Url)
def saved_url(instance, created, **kwargs):
apartments = []
if created:
url = instance.url
soup = make_request(url)
for link in soup.find_all('div', attrs={'data-name': 'LinkArea'}):
url = link.find('a').get('href')
driver.get(url)
time.sleep(1)
try:
rooms = driver.find_element(By.XPATH, '//div[1][@data-name="OfferTitle"]/h1').text
except:
rooms = None
try:
price = driver.find_element(By.XPATH, '//div[1]/div/span/span[1][@itemprop="price"]').text
except:
price = None
try:
address = driver.find_element(By.XPATH,
'//section/div/div[1]/div[2]/span[@itemprop="name"]').get_attribute(
'content')
except:
address = None
try:
desc = driver.find_element(By.XPATH, '//div/span/p[@itemprop="description"]').text
except:
desc = None
try:
floor = driver.find_element(By.XPATH, '//div/div[4]/div[1][@data-testid="object-summary-description-value"]').text
except:
floor = None
try:
photos = [img.get_attribute('src') for img in driver.find_elements(By.CLASS_NAME, 'fotorama__img')]
except:
photos = None
apartments.append(
{
'rooms': rooms,
'price': price,
'address': address,
'desc': desc,
'floor': floor,
'photos': photos,
}
)
save_data(apartments)
#save function
def save_data(apartments_list):
for ap in apartments_list:
im = Image()
try:
apartment = Apartment.objects.create(
rooms=ap['rooms'],
price=ap['price'],
address=ap['address'],
desc=ap['desc'],
floor=ap['floor'],
)
for image in ap['photos']:
pic = urllib.request.urlretrieve(image, image.split('/')[-1])[0]
im.img = im.img.save(pic, File(open(pic, 'rb')))
im.apartment = apartment
except Exception as e:
print(e)
break
uj5u.com熱心網友回復:
您的問題是您實際上并未保存影像。
嘗試改變這一點
def save_data(apartments_list):
for ap in apartments_list:
im = Image()
try:
apartment = Apartment.objects.create(
rooms=ap['rooms'],
price=ap['price'],
address=ap['address'],
desc=ap['desc'],
floor=ap['floor'],
)
for image in ap['photos']:
pic = urllib.request.urlretrieve(image, image.split('/')[-1])[0]
im.img = im.img.save(pic, File(open(pic, 'rb')))
im.apartment = apartment
except Exception as e:
print(e)
break
到
def save_data(apartments_list):
for ap in apartments_list:
try:
apartment = Apartment.objects.create(
rooms=ap['rooms'],
price=ap['price'],
address=ap['address'],
desc=ap['desc'],
floor=ap['floor'],
)
for image in ap['photos']:
im = Image()
pic = urllib.request.urlretrieve(image)[0]
im.img.save(image, File(open(pic, 'rb')))
im.apartment = apartment
im.save() #new
except Exception as e:
print(e)
break
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/370670.html
上一篇:psycopg2列值上的未定義列
