python - 如何在 url 中抓取具有不同数据的多个网站
问题描述
我正在从网页中抓取一些数据,其中网址末尾有产品的 id,它似乎重写了每一行的数据,就像它没有从下一行附加数据一样,我不知道到底发生了什么,如果我的第一个 for 是错误的,或者缩进,我之前尝试过没有字典,它正在附加但在同一行,我转置它但没有按我想要的那样工作,所以我这样做了现在它不会附加下一行,请帮助
data_cols = []
cols = {'pro_header': [],
'pro_id': [],
.
.
.
'pro_uns5': []
}
#the id for each product
fileID = open('idProductsList.txt', 'r')
proIDS = fileID.read().split()
for proID in proIDS:
url = 'https:/website.com/mall/es/mx/Catalog/Product/' + proID
html = urllib2.urlopen(url).read()
soup = bs.BeautifulSoup(html , 'lxml')
table = soup.find("table",{"class": "ProductDetailsTable"})
rows = table.find_all('tr')
for row in rows:
labels.append(str(row.find_all('td')[0].text))
try:
data.append(str(row.find_all('td')[1].text))
except IndexError:
data.append('')
cols['pro_header'].append(data[0])
cols['pro_id'].append(data[1])
.
.
.
cols['pro_uns5'].append(data[43])
df = pd.DataFrame(cols)
df.set_index
#df.reindex()
df.to_csv('sample1.csv')
实际输出为:
pro_id pro_priceCostumer pro_priceData
1FK7011-5AK24-1AA3 " Mostrar precios
" PM300:Producto activo
1FK7011-5AK24-1AA3 " Mostrar precios
" PM300:Producto activo
1FK7011-5AK24-1AA3 " Mostrar precios
" PM300:Producto activo
应该是这样的(这只是数据的一小部分表示):
pro_id pro_priceCostumer pro_priceData
1FK7011-5AK24-1AA3 " Mostrar precios
" PM300:Producto activo
1FK7011-5AK24-1JA3 " Mostrar precios
" PM300:Producto activo
1FK7022-5AK21-1UA0 " Mostrar precios
" PM300:Producto activo
解决方案
我猜标签是作为一个变量工作的。要附加此内容,您需要使用列表。在代码顶部添加labels=list()
为全局变量。同样的事情也应该做data
。
推荐阅读
- google-cloud-platform - 如何使用谷歌云文本到语音 API?我联系了他们的支持并没有太大帮助。任何聪明的人可以让我度过这个难关吗?
- loops - 如何在循环中导航低谷范围和填充范围?
- python - Windows 上的 Python 64 位:OSError: [WinError 193] %1 is geen geldige Win32-toepassing
- processing - 处理中静止物体的自适应背景减法
- vue.js - Vue Axios - 使用 bootstrapVue 和 vuex,上传文件和文本仍有问题?
- javascript - 如何使用正则表达式对不同的字母(不一定是连续的)进行分组
- github - 如何取消 github/pypi 项目上的功能
- swiftui - 在 Swift UI 中垂直居中文本
- sql - 如何选择除原始行之外的所有重复行?
- sql - 需要帮助从光标中进行选择,就像它是工作台一样