2012-04-09 8 views
1

Ich versuche, ein Skript zu erstellen, das eine TXT-Datei mit mehreren Zeilen von YouTube-Nutzernamen aufnimmt, an die URL der YouTube-Benutzerhomepage anfügt und durchsucht Profildaten.Iterieren durch mehrere URLs aus TXT-Datei mit Python/BeautifulSoup

Der folgende Code gibt mir die Informationen, die ich für einen Benutzer haben möchte, aber ich habe keine Ahnung, wo ich anfangen soll, um mehrere URLs zu importieren und zu durchlaufen.

#!/usr/bin/env python 
# -- coding: utf-8 -- 
from bs4 import BeautifulSoup 
import re 
import urllib2 

# download the page 
response = urllib2.urlopen("http://youtube.com/user/alxlvt") 
html = response.read() 

# create a beautiful soup object 
soup = BeautifulSoup(html) 

# find the profile info & display it 
profileinfo = soup.findAll("div", { "class" : "user-profile-item" }) 
for info in profileinfo: 
    print info.get_text() 

Hat jemand irgendwelche Empfehlungen? .

ZB wenn ich eine TXT-Datei, die gelesen:

username1 
username2 
username3 
etc. 

Wie könnte ich über Iterieren durch diejenigen gehen, um sie zu http://youtube.com/user/%s anhängt, und die Schaffung einer Schleife alle Infos zu ziehen?

Antwort

1

Wenn Sie kein echtes Scraping-Modul (wie Scrapy, Mechanize, Selen usw.) verwenden möchten, können Sie einfach weiterlesen, was Sie geschrieben haben.

  1. die Iteration auf Dateiobjekte verwenden Zeile für Zeile ein paar Dinge, eine saubere Tatsache über Dateiobjekte zu lesen ist, dass, wenn sie mit ‚rb‘ geöffnet werden, rufen sie tatsächlich Readline-() als ihre Iterator, so können Sie einfach for line in file_obj Zeile für Zeile in einem Dokument gehen.
  2. verketten URLs Ich verwendete + unten, aber Sie können auch die Verkettungsfunktion verwenden.
  3. machen Sie eine Liste von URLs - werden Sie taumeln Ihre Anfragen lassen, so können Sie compassionate screen scraping.

    # Goal: make a list of urls 
    url_list = [] 
    
    # use a try-finally to make sure you close your file. 
    try: 
        f = open('pathtofile.txt','rb') 
        for line in f: 
         url_list.append('http://youtube.com/user/%s' % line) 
        # do something with url list (like call a scraper, or use urllib2 
    finally: 
        f.close() 
    

EDIT tun: Andrew G-String-Format ist klarer. :)

0

Sie müssen die Datei öffnen (vorzugsweise mit der with open('/path/to/file', 'r') as f: Syntax) und dann f.readline() in einer Schleife tun. Weisen Sie die Ergebnisse von readline() einer Zeichenfolge wie "username" zu und führen Sie dann Ihren aktuellen Code innerhalb der Schleife aus, beginnend mit response = urllib2.urlopen("http://youtube.com/user/%s" % username).

Verwandte Themen