我正在尝试让Python基于csv文件打开网站。 我单独检查了所有代码,以确保它有效,但是当我从csv文件中引入此变量时,我收到以下错误消息: 这是代码:
import urllib
import urllib.request
from bs4 import BeautifulSoup
import os
import csv
f = open('gropn1.csv')
csv_f = csv.reader(f)
for row in csv_f:
theurl="http://www.grote.com/?s="+csv_f[1] + "&q1=1"
thepage = urllib.request.urlopen(theurl)
soup = BeautifulSoup(thepage,"html.parser")
for partno in soup.find('h2',{"class":"single-product-number"}):
print(partno)
for link in soup.find('ul',{"class":"breadcrumbs"}).findAll('a'):
print(link.text)
f.close()
这是错误:
Traceback (most recent call last):
File "grotestart2.py", line 13, in <module>
theurl="http://www.grote.com/?s="+csv_f[1] + "&q1=1"
TypeError: '_csv.reader' object is not subscriptable
任何帮助将不胜感激! 感谢
答案 0 :(得分:0)
TypeError:&#39; _csv.reader&#39;对象不可订阅
csv_f
是您的 csv阅读器实例,根据定义它实际上是"not subscriptable"。
您是不是要使用row
变量。替换:
theurl="http://www.grote.com/?s="+csv_f[1] + "&q1=1"
使用:
theurl="http://www.grote.com/?s="+row[1] + "&q1=1"
您还试图迭代soup.find()
调用的结果,这是{em}不可迭代的Tag
实例。您打算使用find_all()
。替换:
for partno in soup.find('h2',{"class":"single-product-number"}):
使用:
for partno in soup.find_all('h2', {"class":"single-product-number"}):
或者,使用CSS selector的较短版本:
for partno in soup.select('h2.single-product-number'):