with usar tutorial scraping scrap instalar example como python html beautifulsoup scraper

usar - scrap with python



Python: BeautifulSoup extrae texto de la etiqueta de anclaje (5)

Quiero extraer el texto de src siguiente de la etiqueta de imagen y el texto de la etiqueta de anclaje que está dentro de los datos de la clase div.

Logré extraer el img src con éxito, pero tengo problemas para extraer el texto de la etiqueta de anclaje.

<a class="title" href="http://rads.stackoverflow.com/amzn/click/B0073HSK0K">Nikon COOLPIX L26 16.1 MP Digital Camera with 5x Zoom NIKKOR Glass Lens and 3-inch LCD (Red)</a>

Aquí está el enlace para toda la página HTML.

Aqui esta mi codigo

for div in soup.findAll(''div'', attrs={''class'':''image''}): print "/n" for data in div.findNextSibling(''div'', attrs={''class'':''data''}): for a in data.findAll(''a'', attrs={''class'':''title''}): print a.text for img in div.findAll(''img''): print img[''src'']

Lo que estoy tratando de hacer es extraer la imagen src (enlace) y el título al lado de la clase div = datos.

así por ejemplo

<a class="title" href="http://rads.stackoverflow.com/amzn/click/B0073HSK0K">Nikon COOLPIX L26 16.1 MP Digital Camera with 5x Zoom NIKKOR Glass Lens and 3-inch LCD (Red)</a>

Quiero extraer: Nikon COOLPIX L26 16.1 MP Digital Camera with 5x Zoom NIKKOR Glass Lens and 3-inch LCD (Red)


En mi caso, funcionó así:

from BeautifulSoup import BeautifulSoup as bs url="http://blabla.com" soup = bs(urllib.urlopen(url)) for link in soup.findAll(''a''): print link.string

¡Espero eso ayude!


Esto ayudará:

from bs4 import BeautifulSoup data = ''''''<div class="image"> <a href="http://www.example.com/eg1">Content1<img src="http://image.example.com/img1.jpg" /></a> </div> <div class="image"> <a href="http://www.example.com/eg2">Content2<img src="http://image.example.com/img2.jpg" /> </a> </div>'''''' soup = BeautifulSoup(data) for div in soup.findAll(''div'', attrs={''class'':''image''}): print(div.find(''a'')[''href'']) print(div.find(''a'').contents[0]) print(div.find(''img'')[''src''])

Si está buscando productos de Amazon, debería utilizar la API oficial. Hay al menos un paquete de Python que aliviará sus problemas de raspado y mantendrá su actividad dentro de los términos de uso.


Todas las respuestas anteriores realmente me ayudaron a construir mi respuesta, debido a esto voté por todas las respuestas que otros usuarios publicaron: Pero finalmente puse mi propia respuesta al problema exacto con el que estaba tratando:

Como se definió claramente la pregunta, tuve que acceder a algunos de los hermanos y sus hijos en una estructura de dom: esta solución recorrerá las imágenes en la estructura de dom y construirá el nombre de la imagen con el título del producto y guardará la imagen en el directorio local.

import urlparse from urllib2 import urlopen from urllib import urlretrieve from BeautifulSoup import BeautifulSoup as bs import requests def getImages(url): #Download the images r = requests.get(url) html = r.text soup = bs(html) output_folder = ''~/amazon'' #extracting the images that in div(s) for div in soup.findAll(''div'', attrs={''class'':''image''}): modified_file_name = None try: #getting the data div using findNext nextDiv = div.findNext(''div'', attrs={''class'':''data''}) #use findNext again on previous object to get to the anchor tag fileName = nextDiv.findNext(''a'').text modified_file_name = fileName.replace('' '',''-'') + ''.jpg'' except TypeError: print ''skip'' imageUrl = div.find(''img'')[''src''] outputPath = os.path.join(output_folder, modified_file_name) urlretrieve(imageUrl, outputPath) if __name__==''__main__'': url = r''http://www.amazon.com/s/ref=sr_pg_1?rh=n%3A172282%2Ck%3Adigital+camera&keywords=digital+camera&ie=UTF8&qid=1343600585'' getImages(url)


Yo sugeriría ir a la ruta lxml y usar xpath.

from lxml import etree # data is the variable containing the html data = etree.HTML(data) anchor = data.xpath(''//a[@class="title"]/text()'')


>>> txt = ''<a class="title" href="http://rads..com/amzn/click/B0073HSK0K">Nikon COOLPIX L26 16.1 MP Digital Camera with 5x Zoom NIKKOR Glass Lens and 3-inch LCD (Red)</a> '' >>> fragment = bs4.BeautifulSoup(txt) >>> fragment <a class="title" href="http://rads..com/amzn/click/B0073HSK0K">Nikon COOLPIX L26 16.1 MP Digital Camera with 5x Zoom NIKKOR Glass Lens and 3-inch LCD (Red)</a> >>> fragment.find(''a'', {''class'': ''title''}) <a class="title" href="http://rads..com/amzn/click/B0073HSK0K">Nikon COOLPIX L26 16.1 MP Digital Camera with 5x Zoom NIKKOR Glass Lens and 3-inch LCD (Red)</a> >>> fragment.find(''a'', {''class'': ''title''}).string u''Nikon COOLPIX L26 16.1 MP Digital Camera with 5x Zoom NIKKOR Glass Lens and 3-inch LCD (Red)''