Python 如何在标题中只保留唯一的值,并在不同的行中获取对应的值?
我有一个链接,在这个链接中,我有一些产品。每种产品都有一个规格表。该表的第一列应该是标题,第二列应该是与之对应的数据。每个表的第一列都不同,有一些重叠的类别。我想得到一个大桌子,上面有所有这些类别,每行都有不同的产品。我能够获得一个表(一种产品)的数据,如下所示:Python 如何在标题中只保留唯一的值,并在不同的行中获取对应的值?,python,Python,我有一个链接,在这个链接中,我有一些产品。每种产品都有一个规格表。该表的第一列应该是标题,第二列应该是与之对应的数据。每个表的第一列都不同,有一些重叠的类别。我想得到一个大桌子,上面有所有这些类别,每行都有不同的产品。我能够获得一个表(一种产品)的数据,如下所示: import requests import csv from bs4 import BeautifulSoup def cpap_spider(max_pages): page=1 while page<=m
import requests
import csv
from bs4 import BeautifulSoup
def cpap_spider(max_pages):
page=1
while page<=max_pages:
url= "https://www.1800cpap.com/cpap-masks/nasal?page=" +str(page)
source_code= requests.get(url)
plain_text= source_code.text
soup= BeautifulSoup(plain_text, 'html.parser')
for link in soup.findAll("a", {"class":"facets-item-cell-grid-title"}):
href="https://www.1800cpap.com"+link.get("href")
title= link.string
each_item(href)
print(href)
#print(title)
page+=1
data=[]
def each_item(item_url):
source_code= requests.get(item_url)
plain_text= source_code.text
soup= BeautifulSoup(plain_text, 'html.parser')
table=soup.find("table", {"class":"table"})
table_rows= table.find_all('tr')
for row in table_rows:
cols = row.find_all('td')
cols = [ele.text.strip() for ele in cols]
data.append([ele for ele in cols if ele]) # Get rid of empty values
b = open('all_appended.csv', 'w')
a = csv.writer(b)
a.writerows(data)
b.close()
cpap_spider(1)
导入请求
导入csv
从bs4导入BeautifulSoup
def cpap_爬行器(最大页数):
页码=1
当page假设标题始终位于每个表的第一行时,您只需跳过每个表中的该行,但不包括第一行。一种简单的方法是将要处理的第一行存储在初始化为0的变量中,并在处理函数中将其设置为1。可能代码:
def cpap_spider(max_pages):
page=1
start_row = 0
while page<=max_pages:
...
for link in soup.findAll("a", {"class":"facets-item-cell-grid-title"}):
...
each_item(href, start_row)
start_row = 1 # only first call to each_item will get start_row=1
print(href)
#print(title)
page+=1
...
def each_item(item_url, start_row):
...
table_rows= table.find_all('tr')
for row in table_rows[start_row:]: # skip first row if start_row==1
...
def cpap_spider(最大页数):
页码=1
起始行=0
当页面使用xlsxwriter
而不是csv
时,因为如果文本包含一个没有空格的逗号,“
而不是旁边有空格的逗号,”
则您的csv文件将出现问题,因为每个列值都由,“
分隔,例如如果text=“aa,bb”
然后csv将认为此文本包含两列,如“aa”
和“bb”
这就是你需要的
导入请求
导入xlsxwriter
从bs4导入BeautifulSoup
def cpap_爬行器(最大页数):
全球第一排
页码=1
页面显示时,此代码返回一个空白csv文件。我不理解完整问题中您也可以参考的问题。我是否必须添加try-catch表达式,因为对于某些链接,这不起作用?对于某些链接,根本不存在可从中获取信息的表。错误出现在“table_rows=table.find_all('tr')”行中。表示无类型对象您应该首先检查if table
或尝试使用控制台检查table
的值。log(table)
我认为table
是无
,如果您放置if table
,则检查行,否则继续下一个链接