Ich versuche, Inhalt von this page zu kratzen, siehe Code unten. Ich bin jedoch neugierig, als ob ich den Code wiederholt ausführen würde, bekomme ich eine andere Liste von Job-Standorten (und damit, Bewertungen), obwohl die angezeigte Seite in meinem Browser identisch ist. Zum Beispiel Die erste Iteration ist korrekt, aber das Skript ein zweites Mal mit der gleichen Start-URL laufen, die Standorte "University Village" und "Remote Telework" verschwinden von der Liste (und "San Salvador" und "Atlanta" eingeben, so dass die Liste ist gleich lang).Kratzen mit Beautifulsoup - Inhalt unterscheidet sich von der angezeigten Seite
Soweit ich sehen kann, gibt es keinen "versteckten" Text, dh. Alle diese sollten sichtbar sein (und sind in der ersten Iteration). Was ist los? Wie kann ich sicherstellen, alle Inhalte zu erfassen (ich muss für ein paar tausend Seiten wiederholen, damit ich die verschrotteten Daten nicht manuell durchgehen möchte).
This question ist verwandt, aber ich glaube nicht, dass es ein IP-Problem hier ist, da ich den angezeigten Inhalt in der ersten Iteration erhalten kann.
Bearbeitet um hinzuzufügen: Der Code überspringt tatsächlich einige Bewertungen, obwohl diese, soweit ich sehen kann, genau wie die, die der Code aufnimmt, identifiziert werden. Hier
ist der Code (vereinfacht):
list_url= ["http://www.indeed.com/cmp/Microsoft/reviews?fcountry=ALL"]
for url in list_url:
base_url_parts = urllib.parse.urlparse(url)
while True:
raw_html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(raw_html,"lxml")
review_tag={'class':re.compile("cmp-review-container")}
reviews=soup.find_all(attrs=review_tag)
job_locations=[]
for r in reviews:
if r.find(attrs={'class':"cmp-reviewer-job-location"}) != None:
job_location=r.find(attrs={'class':"cmp-reviewer-job-location"}).get_text().strip().encode('utf-8')
else:
job_location = "."
job_locations.append(job_location)
#Zip the data and write the observations to the CSV file
try:
last_link = soup.find('div', id='company_reviews_pagination').find_all('a')[-1]
if last_link.text.startswith('Next'):
next_url_parts = urllib.parse.urlparse(last_link['href'])
url = urllib.parse.urlunparse((base_url_parts.scheme, base_url_parts.netloc,
next_url_parts.path, next_url_parts.params, next_url_parts.query,
next_url_parts.fragment))
print(url)
else:
break
except:
break
csvfile.close()
PS. Entschuldigung, wenn dies nicht der richtige Ort ist, um diese Frage zu posten; lassen Sie mich in diesem Fall von einem geeigneteren Ort wissen.
Danke. Gibt es eine Möglichkeit, CasperJS zu verwenden, um die URL zu öffnen und zu lesen, aber den Bearbeitungsteil schön auf Basis zu halten? Oder würde ich die gleichen Ergebnisse erzielen, wenn ich ghost.py verwenden würde (wobei der Hauptteil des Codes unverändert bleibt)? Ich bin ein Anfänger und alles beginnt ist, mmm, einschüchternd? :) –
Hi anne_t, meiner Meinung nach ist der allgemeine Weg, bs und casperjs zusammen zu verwenden, einen einzigen Prozess (wie Popen) zu verwenden, um Casperjs Skript in Ihrem Py zu nennen, und verwenden Sie bs, um HTML von Casperjs heruntergeladen zu behandeln. Außerdem bearbeite ich meine Antwort und schließe einen Link mit PhantomJS und bs zusammen. Ich bin mir nicht sicher über ghost.py Teil, ich habe es nicht vorher behandelt :) – linpingta
Vielen Dank! Ich werde definitiv nachsehen! –