如何获取urlopen来处理文件中的URL列表?

时间:2016-07-14 09:39:59

标签: python

我试图从文件中获取一个url列表以使用urlopen,这样我就可以遍历它们并使用每个url。

我能够以一个直接作为参数传递的url做我想要的完美,但我希望能够对从文件中检索的列表做同样的事情。它可以达到数百个,所以理想情况下我想从Excel或CSV文件中迭代它们。

这是我到目前为止所做的:

import re
import csv
from urllib.request import urlopen
from bs4 import BeautifulSoup

with open('links.csv','r') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        string_row = (str(row))
        after_strip = string_row.strip('\'')
        page_source = urlopen(after_strip)

        soup = BeautifulSoup(page_source.read(), 'html.parser')

        tag_with_word = soup.find_all(href=re.compile("//www.someword"))
        print(tag_with_word)

当我尝试打印行时,它完全没问题,但如果我尝试在urlopen(行)中使用它,则会出错。所以我尝试将其转换为字符串然后剥离撇号。可悲的是,它仍然没有用。

我是Python的新手,上周刚刚安装了它。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

谢谢大家的帮助。

我在发布此消息后几个小时就弄明白了,完全忘了这里。道歉。

为了任何人的利益,这是我的最终工作代码:

import re
import csv
import urllib2
from bs4 import BeautifulSoup

with open('links.csv','r') as csvfile:
  for row in csvfile.readlines():
    #print (row)

    try:
        page_source = urllib2.urlopen(row)
    except urllib2.URLError:
        print ("Exception - "+row)
        continue
    #print (page_source.read())

    if "xxx" in row:
        print("XXX - "+row)

    else:

        soup = BeautifulSoup(page_source.read(), 'html.parser')

        #print(soup.prettify())
        tag_with_xxx = soup.find_all(href=re.compile(".xxx."))

        if not tag_with_xxx:
            print("No tag - "+row)

        #else:
            #print("With tag - "+row)

总结一下,我打开带有链接的CSV文件,遍历它。首先,我需要检查URL本身是否包含某个字符串,如果没有,请更深入并检查页面源的内容是否存在。

在某些时候,URL无法打开破坏脚本,因此我添加了try块来捕获它,并continue以确保循环继续。

我掩盖了一些机密信息。

再次感谢大家。

答案 1 :(得分:0)

您的问题是由您的网址格式(编码)错误造成的。

要解决您的问题,您应该在使用openurl解析之前将URL转换为utf-8。

string_row = str(row)
after_encode = string_row.encode('utf-8')
page_source = urlopen(after_encode)

您可以立即将string_row设置为编码的URL,例如:

encoded_url = str(row).encode('utf-8')
page_source = urlopen(encoded_url)

如果这不起作用,您能否发布错误以便更清楚地回答?