我试图从文件中获取一个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的新手,上周刚刚安装了它。有人可以帮忙吗?
答案 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)
如果这不起作用,您能否发布错误以便更清楚地回答?