使用Python / BeautifulSoup迭代.text文件中的多个URL

时间:2012-04-09 04:53:21

标签: python beautifulsoup

我正在尝试创建一个脚本,该脚本将带有多行YouTube用户名的.txt文件添加到YouTube用户主页网址,然后抓取以获取个人资料数据。

下面的代码为我提供了一个用户想要的信息,但我不知道从哪里开始导入和迭代多个URL。

#!/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()

有人有任何建议吗?

例如,如果我有一个读取的.txt文件:

username1
username2
username3
etc.

我怎样才能重复这些内容,将它们附加到http://youtube.com/user/%s,并创建一个循环来提取所有信息?

2 个答案:

答案 0 :(得分:2)

如果您不想使用实际的刮擦模块(如scrapy,mechanize,selenium等),您可以继续迭代您所编写的内容。

  1. 使用文件对象上的迭代逐行读取一些事情,关于文件对象的一个​​巧妙的事实是,如果用'rb'打开它们,它们实际上调用readline()作为它们的迭代器,所以你可以在文档中逐行for line in file_obj
  2. 连接网址我在下面使用+,但您也可以使用连接功能。
  3. 制作网址列表 - 会让您错开请求,这样就可以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()
    
  4. 编辑:Andrew G的字符串格式更清晰。 :)

答案 1 :(得分:0)

您需要打开文件(最好使用with open('/path/to/file', 'r') as f:语法),然后在循环中执行f.readline()。将readline()的结果分配给类似" username"的字符串。然后在循环中运行当前代码,从response = urllib2.urlopen("http://youtube.com/user/%s" % username)开始。