Derzeit crawle ich eine Webseite für Zeitungsartikel mit Pythons BeautifulSoup Library. Diese Artikel sind im Objekt "Details" gespeichert.Python: Passende Strings aus einem Array mit Substrings aus Texten in einem anderen Array
Dann habe ich ein paar Namen von verschiedenen Straßen, die im Objekt "Linien" gespeichert sind. Jetzt möchte ich die Artikel nach den Straßennamen durchsuchen, die in "Zeilen" enthalten sind.
Wenn einer der Straßennamen Teil eines der Artikel ist, möchte ich den Namen der Straße in einem Array sichern.
Wenn für einen Artikel keine Übereinstimmung gefunden wird (der ausgewählte Artikel enthält keine der Straßennamen), sollte ein leeres Element im Array vorhanden sein.
Nehmen wir zum Beispiel an, das Objekt "Linien" würde aus ("Abbey Road", "St. John's Bridge", "West Lane", "Sunpoint", "East End") bestehen.
Das Objekt "Details" besteht aus 4 Artikeln, von denen 2 "Abbey Road" und "West Lane" enthalten (z. B. in "Autounfall auf Abbey Road, drei Menschen verletzt"). Die anderen 2 Artikel enthalten keine Namen von "Zeilen".
Dann, nachdem das Ergebnis passende sollte ein Array wie folgt sein: [] [ „Abbey Road“] [] [ „West Lane“]
ich auch Vektorisierung für diesen Einsatz wurde gesagt, als meine ursprüngliche Datenmuster ist ziemlich groß. Ich bin jedoch nicht vertraut mit der Verwendung der Vektorisierung für String-Operationen. Hat schon jemand damit gearbeitet?
Mein Code sieht derzeit wie folgt aus, aber dies nur gibt „-1“ als Elemente meiner resultierende Array:
from bs4 import BeautifulSoup
import requests
import io
import re
import string
import numpy as np
my_list = []
for y in range (0, 2):
y *= 27
i = str(y)
my_list.append('http://www.presseportal.de/blaulicht/suche.htx?q=' + 'einbruch' + '&start=' + i)
for link in my_list:
# print (link)
r = requests.get(link)
r.encoding = 'utf-8'
soup = BeautifulSoup(r.content, 'html.parser')
with open('a4.txt', encoding='utf8') as f:
lines = f.readlines()
lines = [w.replace('\n', '') for w in lines]
details = soup.find_all(class_='news-bodycopy')
for class_element in details:
details = class_element.get_text()
sdetails = ''.join(details)
slines = ''.join(lines)
i = str.find(sdetails, slines[1 : 38506])
print(i)
Wenn jemand mein Experiment reproduzieren will, ist die Website-URL im Code oben und das Crawlen und Speichern von Artikeln im Objekt "Details" funktioniert einwandfrei, so dass der Code einfach kopiert werden kann. für Hinweise https://www.dropbox.com/s/o0cjk1o2ej8nogq/a4.txt?dl=0
Vielen Dank, wie ich diese Arbeit machen kann, vorzugsweise über Vektorisierung:
Die .txt-Datei für meine ursprünglichen Daten für das Objekt „Linien“ kann in diesem Dropbox-Ordner zugegriffen werden .
Ich bin ziemlich unsicher über die zweite for-Schleife, wo Variable 'soup' auf jeder Iterationen überschrieben. Wie auch immer, lassen Sie mich versuchen, Ihren gesamten Code auszuführen und das Problem zu verstehen! –
Die zweite for-Schleife dient zum Crawlen der verschiedenen Seiten der Website, auf denen die Nachrichten gespeichert sind. Wir erstellen eine Liste von Links, jeder Link für eine Seite, mit der ersten for-Schleife und der Zähler der Paginierung ist 27 in der URL. Allerdings habe ich Schwierigkeiten, die Straßennamen aus den Artikeln zu extrahieren, indem ich sie mit der Liste aus "a4.txt" abgleiche und sie in einem Array ablege, wo Elemente ohne übereinstimmende Straßennamen leer sind und Elemente mit übereinstimmenden Namen das passende enthalten nur Name. Mein gesamter Code ist in dem Beitrag oben und es gibt einen Link für die "a4.txt". @VivekHarikrishnan – DataFreshman