2017-08-30 3 views
1

Ich benutze Python 3.6 und ich bin in der Lage, Text mit BeautifulSoup zu kratzen. Ich war mit Walmart Website üben. Ich versuchte, Text von Walmart zu kratzen. Hier ist mein Code.Web Scraping mit beautifulSoup und urllib

from bs4 import BeautifulSoup 
from urllib.request import urlopen 
main_page=urlopen('http://www.walmart.com/ip/Sceptre-32-Class-HD-720P-LED-TV-X322BV-SR/55427159') 
soup = BeautifulSoup(main_page,"lxml") 
title=soup.select_one("h1.prod-ProductTitle.no-margin.heading-a").get_text() 
price=soup.select_one("span.Price-group").get_text() 
highLights=soup.select_one("div.ProductPage-short-description-body").get_text() 
description=soup.select_one("div.about-desc").get_text() 
print(title,"\n",highLights,"\n",description,"\n",price) 

In obigem Code, den ich zu extrahieren Produktnamen, Preis, hoche Lichter und Beschreibung, aber ich bin nicht in der Lage Beschreibung zu extrahieren (über diesen Artikel). Statt Beschreibung bekomme ich etwas anderes.

Bitte helfen Sie mir, von diesem Problem zu kommen.

Antwort

0

Weil es 2 divs mit class = "about-desc" gibt, da Sie select_one verwenden, wird nur das erste div zurückgegeben, aber Sie brauchen das zweite div. Hier ist die zwicken:

description=soup.select("div.about-desc")[1].get_text() 

Update: Die Website tatsächlich blockiert urllib die Standard User-Agent, so dass Sie die Maske sollte.

from bs4 import BeautifulSoup 
from urllib.request 
user_agent = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0'} 
req = urllib.request.Request(url="http://www.walmart.com/ip/Sceptre-32-Class-HD-720P-LED-TV-X322BV-SR/55427159", headers=user_agent) 
main_page = urllib.request.urlopen(req) 
soup = BeautifulSoup(main_page,"lxml") 
title=soup.select_one("h1.prod-ProductTitle.no-margin.heading-a").get_text() 
price=soup.select_one("span.Price-group").get_text() 
highLights=soup.select_one("div.ProductPage-short-description-body").get_text() 
description=soup.select("div.about-desc")[1].get_text() 
print(title,"\n",highLights,"\n",description,"\n",price)