2017-12-17 9 views
3

Ich habe einen Scraper in Python geschrieben, um verschiedene Kategorienamen von einer Webseite zu bekommen, aber es kann nichts von dieser Seite holen. Ich bin ernsthaft verwirrt, um nicht herausfinden zu können, wo ich falsch liege. Jede Hilfe würde sehr geschätzt werden. HierIch kann Kategorietitel nicht von einer Webseite scratzen

ist der Link zu der Webseite: URL

Hier ist, was ich versucht habe, so weit:

from bs4 import BeautifulSoup 
import requests 

res = requests.get("replace_with_above_url",headers={"User-Agent":"Mozilla/5.0"}) 
soup = BeautifulSoup(res.text,"lxml") 
for items in soup.select('.slide_container .h3.standardTitle'): 
    print(items.text) 

Elements, in dem eine solche Kategorie Namen Ich bin nach:

<div class="slide_container"> 
    <a href="/offers/furniture/" tabindex="0"> 
     <picture style="float: left; width: 100%;"><img style="width:100%" src="/_m4/9/8/1513184943_4413.jpg" data-w="270"></picture> 
     <div class="floated-details inverted" style="height: 69px;"> 
      <div class="h3 margin-top-sm margin-bottom-sm standardTitle"> 
       Furniture Offers       #This is the name I'm after 
      </div> 
      <p class="carouselDesc"> 
      </p> 
     </div> 
    </a> 
</div> 
+0

erhalten Sie die richtigen HTML in res.text? – imox

+0

Es scheint, dass der Server nicht möchte, dass Sie die Daten scrappen :) Ihre Anfrage gibt Ihnen nicht die Seite zurück, die Sie tatsächlich in Ihrem Browser sehen, sondern eine Blockseite mit folgendem Inhalt "" Wie Sie www.therange.co durchsuchten. Irgendetwas an deinem Browser hat uns dazu gebracht, dich für einen Bot zu halten. Es gibt einige Gründe, warum das passieren könnte ... " – Andersson

+0

Mit Selen versucht, aber das Endergebnis ist wie du @sir Andersson erwähnt hast. – SIM

Antwort

2
from bs4 import BeautifulSoup 
import requests 

headers = { 
    'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 
'accept-encoding':'gzip, deflate, br', 
'accept-language':'en-US,en;q=0.9', 
'cache-control':'max-age=0', 
'referer':'https://www.therange.co.uk/', 
'upgrade-insecure-requests':'1', 
'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36', 
} 
res = requests.get("https://www.therange.co.uk/",headers=headers) 
soup = BeautifulSoup(res.text,'html.parser') 
for items in soup.select('.slide_container .h3.standardTitle'): 
    print(items.text) 

Versuchen Sie, diese

ein User-Agent ist nicht genug, weil Header der wichtigste Teil von sind scrapping.if Sie einen Header dann Server ll behandeln Sie als Bot verpassen.

+0

Sie sind einfach toll @Tailor Devendra. Deine Lösung hat endlich funktioniert. Ich werde es bald annehmen. Ich würde aber gerne etwas wissen. Sie übersprungen einige Parameter zusammen mit Cookies, um zu den Überschriften entsprechend zu addieren, was ich in den Devtools sehen kann. Außerdem haben Sie in der Kopfzeile einen zusätzlichen Parameter 'referer' hinzugefügt. Können Sie mir bitte sagen, warum ich das in Zukunft berücksichtigen kann? Vielen Dank. Auch hier hat Ihre Lösung den Fehler perfekt gemacht. – SIM

-1

Verwenden "html.parser" statt "lxml"

+0

Wie kommt diese Antwort das Problem löst? – SIM

+0

Ich nahm an, dass die Variable 'res.text' das obige HTML enthält und weiter berechnet wird. Kannst du das HTML, das du bekommst, in 'res.text' einfügen? – DecoderReloaded

Verwandte Themen