2017-05-11 4 views
2

Wenn ich meine Crawler laufen sie die Ergebnisse als Liste abruft. Ich erwartete jedoch, dass das in einer regulären Zeichenfolge in zwei Spalten angezeigt wird. Danke für jeden Vorschlag.konnte nicht regelmäßig String scraped Daten aus der Liste konvertieren

import requests 
from lxml import html 

url="http://www.wiseowl.co.uk/videos/" 
def Startpoint(links): 
    response = requests.get(links) 
    tree = html.fromstring(response.text) 
    Title= tree.xpath("//p[@class='woVideoListDefaultSeriesTitle']/a/text()") 
    Link=tree.xpath("//p[@class='woVideoListDefaultSeriesTitle']/a/@href") 
    print(Title,Link) 

Startpoint(url) 

Having Ergebnisse wie folgt aus: enter image description here

Aber, erwartete ich die Ausgabe wie: enter image description here

Antwort

1

Versuchen über beide Liste sequentiell iteriert, wie folgt aus:

import requests 
from lxml import html 

url="http://www.wiseowl.co.uk/videos/" 
def Startpoint(links): 
    response = requests.get(links) 
    tree = html.fromstring(response.text) 
    Title= tree.xpath("//p[@class='woVideoListDefaultSeriesTitle']/a/text()") 
    Link=tree.xpath("//p[@class='woVideoListDefaultSeriesTitle']/a/@href") 
    for i,j in zip(Title, Link): 
     print('{:<70}{}'.format(i,j)) 

Startpoint(url) 
+0

Wow !!! Das habe ich erwartet. Danke, Sir Shashank, für eine so großartige Lösung. Die Verwendung dieser dreifachen "t" ist für mich jedoch vage! Vergib meine Unwissenheit. Ich werde dich bald annehmen. – SIM

+0

Oh ja, eigentlich die Ausgabe einige Räume wurden mit so fügte ich hinzu, dass, sorry dafür: P, weil ich versuchte, einige String-Manipulation zu tun, aber ich nicht. aber immer noch ist die Ausgabe korrekt – Shashank

2

Ihre Title und Link enthalten eigentlich kein einziges Element , Aber beide enthalten Listen aller Titel und Links jeweils (die XPath-Ausdrücke mehrere Elemente zusammenpassen).

Also, um eine Liste der title, link Paare zu bekommen, müssen Sie sie zip() zusammen:

pairs = zip(titles, links) 

Sobald du hast, dass du über diese Paare mit einem for Schleife durchlaufen können, und drucken Sie die Elemente links gerechtfertigt, so dass Sie Ihre Spalten erhalten:

print('{:<70}{}'.format(title, link)) 

(Siehe this answer für detaillierte Angaben wie links ausgerichtete Elemente drucken).


Alles zusammen:

import requests 
from lxml import html 

url = "http://www.wiseowl.co.uk/videos/" 


def startpoint(links): 
    response = requests.get(links) 
    tree = html.fromstring(response.text) 
    titles = tree.xpath("//p[@class='woVideoListDefaultSeriesTitle']/a/text()") 
    links = tree.xpath("//p[@class='woVideoListDefaultSeriesTitle']/a/@href") 
    pairs = zip(titles, links) 

    for title, link in pairs: 
     # Replace '70' with whatever you expect the maximum title length to be 
     print('{:<70}{}'.format(title, link)) 

startpoint(url) 
+0

Danke Sir Lukas Graf, Ihre Antwort löst das Problem auch. – SIM

1

Sie können über jeden Link Schleife und drucken den Titel und die URL.

import requests 
from lxml import html 

url="http://www.wiseowl.co.uk/videos/" 
def Startpoint(links): 
    response = requests.get(links) 
    tree = html.fromstring(response.text) 
    links = tree.xpath("//p[@class='woVideoListDefaultSeriesTitle']/a") 
    for link in links: 
     print('{title:<70}{url}'.format(title=link.text, url=link.attrib.['href'])) 

Startpoint(url) 
+0

Danke, Sir Håken Lid, für Sie antworten. Es löst auch das Problem. – SIM

Verwandte Themen