【问题标题】:Importing a .csv with urls and process them (PYTHON)导入带有 url 的 .csv 并处理它们 (PYTHON)
【发布时间】:2013-05-02 07:51:44
【问题描述】:

我正在编写一个脚本,它将导入一个 url 列表,然后检查源代码中的一些内容。我需要有关导入 .csv 和处理它的帮助,如果有人可以帮助这里是代码的一部分

from lxml import html
import csv

def main():
with open('urls.csv', 'r') as csvfile:
    urls = [row[0] for row in csv.reader(csvfile)]

for url in urls:

    doc = html.parse(url)
linkziel = 'http://dandydiary.de/de'
if doc.xpath('//a[@href=$url]', url=linkziel):
    for anchor_node in doc.xpath('//a[@href=$url]', url=linkziel):
        if anchor_node.xpath('./ancestor::div[contains(@class, "sidebar")]'):
            print 'Sidebar'
        elif anchor_node.xpath('./parent::div[contains(@class, "widget")]'):
            print 'Sidebar'           
        elif anchor_node.xpath('./ancestor::div[contains(@class, "comment")]'):
            print 'Kommentar'
        elif anchor_node.xpath('./ancestor::div[contains(@id, "comment")]'):
            print 'Kommentar'
        elif anchor_node.xpath('./ancestor::div[contains(@class, "foot")]'):
            print "Footer"
        elif anchor_node.xpath('./ancestor::div[contains(@id, "foot")]'):
            print "Footer" 
        elif anchor_node.xpath('./ancestor::div[contains(@class, "post")]'):
            print "Contextual"         
        else:
            print 'Unidentified Link'          
else:
    print 'Link is Dead'

if __name__ == '__main__':
main()

我不想只指定一个 url,而是想使用一个 csv 来运行(我使用的是 Python 2)

【问题讨论】:

    标签: python csv web-scraping lxml python-2.x


    【解决方案1】:

    假设您有一个 input.csv 文件,每个新行都有一个 url:

    http://de.wikipedia.org
    http://spiegel.de
    http://www.vickysmodeblog.com/
    

    然后,您可以通过csv 模块将其读入列表并对其进行迭代:

    import csv
    from lxml import html
    
    
    with open('input.csv', 'r') as csvfile:
        urls = [row[0] for row in csv.reader(csvfile)]
    
    for url in urls:
        print url
    
        doc = html.parse(url)
        linkziel = 'http://dandydiary.de/de'
        if doc.xpath('//a[@href=$url]', url=linkziel):
            for anchor_node in doc.xpath('//a[@href=$url]', url=linkziel):
                if anchor_node.xpath('./ancestor::div[contains(@class, "sidebar")]'):
                    print 'Sidebar'
                elif anchor_node.xpath('./parent::div[contains(@class, "widget")]'):
                    print 'Sidebar'
                elif anchor_node.xpath('./ancestor::div[contains(@class, "comment")]'):
                    print 'Kommentar'
                elif anchor_node.xpath('./ancestor::div[contains(@id, "comment")]'):
                    print 'Kommentar'
                elif anchor_node.xpath('./ancestor::div[contains(@class, "foot")]'):
                    print "Footer"
                elif anchor_node.xpath('./ancestor::div[contains(@id, "foot")]'):
                    print "Footer"
                elif anchor_node.xpath('./ancestor::div[contains(@class, "post")]'):
                    print "Contextual"
                else:
                    print 'Unidentified Link'
        else:
            print 'Link is Dead'
    

    它的输出是:

    http://de.wikipedia.org
    Link is Dead
    http://spiegel.de
    Link is Dead
    http://www.vickysmodeblog.com/
    Contextual
    

    【讨论】:

    • 谢谢,效果很好。但是仍然存在一个问题,我在 csv 中有 3 个输入 url,它确实通过它们运行,但是它没有告诉我 2 个 url 不包含链接而 1 个包含链接(例如侧边栏)它只会给出一行(而不是 3 个)
    • 那么,听起来你的 xpath 有问题。谈到http://www.vickysmodeblog.com/:它正确找到了a 节点,但它不在类中带有sidebar 的div 中。
    • 我已经在我的主帖中更新了代码预览,也许这有助于澄清
    • 它似乎只读取 csv 中的最后一行,而不是全部读取。
    • 不,我已经检查过了 - print url 打印来自 csv 的每个 url。你看到了吗?
    【解决方案2】:

    Python 提供了一个csv 模块,您可以使用它来导入列表。

    【讨论】:

      猜你喜欢
      • 2013-12-12
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 2020-12-09
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多