pythonhtml解析脚本,接受url数组并输出关于每个url的特定数据

2024-07-01 08:02:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python编写一个HTML解析器,它将URL或URL列表作为输入,并以以下格式输出每个URL的特定数据:

URL:数据1:数据2

数据点可以在每个url中完全相同的HTML节点上找到。它们在相同的起始标记和结束标记之间保持一致。如果有人愿意帮助一个业余的python程序员完成这项工作,我们将不胜感激。如果你能想出一种方法来输出可以很容易地复制和粘贴到excel文档中进行后续数据分析的话,那就更值得一提了!在

例如,假设我想输出特定YouTube视频的视图计数。对于URL http://www.youtube.com/watch?v=QOdW1OuZ1U0,视图计数大约为360万。对于所有YouTube视频,此数字在页面源中以以下格式找到:

<span class="watch-view-count ">
    3,595,057
</span>

幸运的是,这些确切的标签只在YouTube视频页面上找到一次。这些起始和结束标记可以输入到程序或内置,并在必要时进行修改。程序的输出将是:

http://www.youtube.com/watch?v=QOdW1OuZ1U0:3595057(或3595057)。在


Tags: 数据标记com视图httpurl视频youtube
2条回答
import urllib2
from bs4 import BeautifulSoup

url = 'http://www.youtube.com/watch?v=QOdW1OuZ1U0'
f = urllib2.urlopen(url)
data = f.read()

soup = BeautifulSoup(data)
span = soup.find('span', attrs={'class':'watch-view-count'})
print '{}:{}'.format(url, span.text)

如果不想使用BeautifulSoup,可以使用re

^{pr2}$

至于输出,我想你可以把它们存储在csv文件中。在

对于这类任务,我更喜欢HTMLParser,而不是{}。然而,HTMLParser可能有点棘手。我用不可变的对象来存储数据。。。我肯定这样做是不对的。但它在过去为我做过几个项目。在

import urllib2
from HTMLParser import HTMLParser
import csv 

position = []
results = [""]

class hp(HTMLParser):
    def handle_starttag(self, tag, attrs):
        if tag == 'span' and ('class', 'watch-view-count ') in attrs:   
            position.append('bingo')

    def handle_endtag(self, tag):
        if tag == 'span' and 'bingo' in position:
            position.remove('bingo')

    def handle_data(self, data):
        if 'bingo' in position:
            results[0] += " " + data.strip() + " "


my_pages = ["http://www.youtube.com/watch?v=QOdW1OuZ1U0"]
data = []
for url in my_pages:
    response = urllib2.urlopen(url)
    page = str(response.read())
    parser = hp()
    parser.feed(page)
    data.append(results[0])

    # reinitialize immutiable objects
    position = []
    results = [""]

index = 0
with open('/path/to/test.csv', 'wb') as f:
    writer = csv.writer(f)
    header = ['url', 'output']
    writer.writerow(header)
    for d in data:
        row = [my_pages[index], data[index]]
        writer.writerow(row)
        index += 1

然后打开/路径/到/测试.csv在Excel中

相关问题 更多 >

    热门问题