Zuerst bin ich ein Neuling, ich bin noch neu zu Python und Django und ich habe gerade erst experimentiert mit dem Scraping meiner Daten und Speicherung in Meine Datenbank Ich muss es irgendwie arbeiten lassen. Es kratzt nur ein Objekt und speichert es. nicht mehrere Objekte. Im Moment entwickle ich mich lokal und versuche es herauszufinden. Ich habe es in einer Ansicht wie dieseGerade gelernt, Daten zu kratzen und in meiner Datenbank zu speichern, aber es nur ein Objekt kratzt
def practice(request):
world = get_world_too()
for entry in world:
post = Post()
post.title = entry['text']
post.image_url = entry['src']
post.save()
template = "blog/post/noindex.html"
context = {
}
return render(request, template, context)
und dies ist die Funktion
def get_world_too():
url = 'http://www.example.org'
html = requests.get(url, headers=headers)
soup = BeautifulSoup(html.text, 'html5lib')
titles = soup.find_all('section', 'box')[:9]
entries = [{'href': url + box.a.get('href'),
'src': box.img.get('src'),
'text': box.strong.a.text,
} for box in titles]
return entries
es nur Schrammen und speichert mehrere Objekte Wenn ich die Seite aktualisieren. Aber meine Funktion ist auf 9 gesetzt, also dachte ich, dass mindestens neun Objekte in meiner Datenbank gespeichert wären. und in der Ansicht habe ich eine Schleife
for entry in world:
post = Post()
post.title = entry['text']
post.image_url = entry['src']
post.save()
also sollte nicht die Schleife alle neun der Objekte bekommen? Auch ich nicht, das ist nicht der professionelle Weg, dies zu tun. Während ich sitze, übe ich einfach damit. Letztendlich möchte ich dies als einen Heroku Cron-Job einrichten, den ich den ganzen Tag über mehrmals ausführen werde. Aber im Moment Wie kann ich das erreichen, um mehr als eines der Objekte in einem Schuss zu kratzen und es in meinem db zu speichern.
dieser Vorschlag behoben. Dieser Fehler lässt mich denken, dass ich die Schleife in meine Funktion aufnehmen sollte. Ich hätte diese Einrückung wahrscheinlich eingefangen und es wäre sauberer. Vielen Dank – losee