Actualmente estoy tratando de extraer enlaces de pastebin usando python. Lo que tengo hasta ahora:

from bs4 import BeautifulSoup
import re
import requests
from random import randint
import time
from lxml import etree
from time import sleep
import random

a = requests.get('http://pastebin.com/JGM3p9c9')
scrape = BeautifulSoup(a.text, 'lxml')
linkz = scrape.find_all("textarea", {"id":"paste_code"})

rawlinks = str(linkz)
partition1 = rawlinks.partition('\\r')[0]
links = partition1.partition('">')[-1]

Parece que no puedo hacer que Python compile todos los enlaces con formato http://, pero solo el primero ... El uso de expresiones regulares que encontré en línea no funcionó

Objetivo final Estoy tratando de incluir los enlaces en una lista, en la que puedo enviar solicitudes a todos los enlaces de la lista que compilo.

0
ColeWorld 14 ene. 2017 a las 01:34

3 respuestas

La mejor respuesta

En primer lugar, no tiene que extraer la etiqueta completa y cambiarla a str. La mejor manera de lograrlo es:

#                      `next` to extract content within tag v
#    instead use `find` v                                   v
>>> my_links = scrape.find("textarea", {"id":"paste_code"}).next

Donde my_links mantendrá el valor:

u'http://www.walmart.com\r\nhttp://www.target.com\r\nhttp://www.lowes.com\r\nhttp://www.sears.com'

Para convertir esta cadena en el list de enlaces deseado, puede dividir la cadena en \r\n como:

>>> my_links.split('\r\n')
[u'http://www.walmart.com', u'http://www.target.com', u'http://www.lowes.com', u'http://www.sears.com']
1
Moinuddin Quadri 13 ene. 2017 a las 22:49

Necesita navegar a través de un par de capas de HTML, pero eché un vistazo a la página de pastebin y creo que este código encontrará lo que desea (perdón por cambiar un par de módulos, solo uso estos)

from bs4 import BeautifulSoup
import urllib.request

a = urllib.request.urlopen('http://pastebin.com/JGM3p9c9')
scrape = BeautifulSoup(a, 'html.parser')

x1 = scrape.find_all('div', id = 'selectable')
for x2 in x1:
    x3 = x2.find_all('li')
    for x4 in x3:
        x5 = x4.find_all('div')
        for x6 in x5:
            print(x6.string)

La próxima vez que necesite raspar algo específico, le aconsejo que mire el HML del sitio web haciendo clic derecho y seleccionando 'Inspeccionar elemento'. también puedes hacer:

print(scrape.prettify())

Para tener una mejor idea de cómo está anidado el HTML.

1
Imperial_Sqiud 13 ene. 2017 a las 22:55

Olvídese de usar BS para analizar el HTML; en este caso específico, puede obtener el contenido de PasteBin directamente y convertirlo en un solo revestimiento.

import requests
links = [link.strip() for link in requests.get('http://pastebin.com/raw/JGM3p9c9').text.split('\n')]

También puedes dividir en \r\n

1
Tyler Sebastian 13 ene. 2017 a las 23:03