Html 将变量转换为列表并删除重复项
我用下面的代码刮取了一个网站 该网站是以某种方式构建的,需要使用4个不同的类来刮取所有数据,从而导致一些数据被复制 为了将变量转换为列表,我尝试使用split(“”)方法,但它只为每个刮取的字符串创建了一个列表,开头带有/n。 我还尝试将变量创建为空列表,例如api_name=[],但没有成功 对于删除重复项,我考虑使用set方法,但我认为它只适用于列表 在将变量写入CSV文件之前,我想从变量中删除所有重复的数据,我必须先将它们转换为列表,还是有办法直接从变量中删除它们 如果您对本规范有任何帮助或反馈,我们将不胜感激 谢谢Html 将变量转换为列表并删除重复项,html,python-3.x,web-scraping,beautifulsoup,duplicates,Html,Python 3.x,Web Scraping,Beautifulsoup,Duplicates,我用下面的代码刮取了一个网站 该网站是以某种方式构建的,需要使用4个不同的类来刮取所有数据,从而导致一些数据被复制 为了将变量转换为列表,我尝试使用split(“”)方法,但它只为每个刮取的字符串创建了一个列表,开头带有/n。 我还尝试将变量创建为空列表,例如api_name=[],但没有成功 对于删除重复项,我考虑使用set方法,但我认为它只适用于列表 在将变量写入CSV文件之前,我想从变量中删除所有重复的数据,我必须先将它们转换为列表,还是有办法直接从变量中删除它们 如果您对本规范有任何帮助
import requests
from bs4 import BeautifulSoup
import csv
url = "https://www.programmableweb.com/apis/directory"
api_no = 0
urlnumber = 0
response = requests.get(url)
data = response.text
soup = BeautifulSoup(data, "html.parser")
csv_file = open('api_scraper.csv', 'w')
csv_writer = csv.writer(csv_file)
csv_writer.writerow(['api_no', 'API Name', 'Description','api_url', 'Category', 'Submitted'])
#THis is the place where I parse and combine all the classes, which causes the duplicates data
directories1 = soup.find_all('tr', {'class': 'odd'})
directories2 = soup.find_all('tr', {'class': 'even'})
directories3 = soup.find_all('tr', {'class': 'odd views-row-first'})
directories4 = soup.find_all('tr', {'class': 'odd views-row-last'})
directories = directories1 + directories2 + directories3 + directories4
while urlnumber <= 765:
for directory in directories:
api_NameTag = directory.find('td', {'class':'views-field views-field-title col-md-3'})
api_name = api_NameTag.text if api_NameTag else "N/A"
description_nametag = directory.find('td', {'class': 'col-md-8'})
description = description_nametag.text if description_nametag else 'N/A'
api_url = 'https://www.programmableweb.com' + api_NameTag.a.get('href')
category_nametage = directory.find('td',{'class': 'views-field views-field-field-article-primary-category'})
category = category_nametage.text if category_nametage else 'N/A'
submitted_nametag = directory.find('td', {'class':'views-field views-field-created'})
submitted = submitted_nametag.text if submitted_nametag else 'N/A'
#These are the variables I want to remove the duplicates from
csv_writer.writerow([api_no,api_name,description,api_url,category,submitted])
api_no +=1
urlnumber +=1
url = "https://www.programmableweb.com/apis/directory?page=" + str(urlnumber)
csv_file.close()
导入请求
从bs4导入BeautifulSoup
导入csv
url=”https://www.programmableweb.com/apis/directory"
空气污染指数=0
urlnumber=0
response=requests.get(url)
data=response.text
soup=BeautifulSoup(数据,“html.parser”)
csv\u file=open('api\u scraper.csv','w')
csv\u writer=csv.writer(csv\u文件)
csv_writer.writerow(['api_no'、'api Name'、'Description'、'api_url'、'Category'、'Submitted']))
#这是我解析和组合所有类的地方,这会导致数据重复
directories1=soup.find_all('tr',{'class':'odd'})
directories2=soup.find_all('tr',{'class':'even'})
directories3=soup.find_all('tr',{'class':'odd views row first'))
directories4=soup.find_all('tr',{'class':'odd views row last'})
目录=目录1+目录2+目录3+目录4
而urlnumber如果不是api链接,我会说只使用pandas读取html并获取索引2。由于您也需要URL,我建议您更改选择器。您希望限制为表以避免重复,并选择描述列的类名
import pandas as pd
import requests
from bs4 import BeautifulSoup as bs
r = requests.get('https://www.programmableweb.com/apis/directory')
soup = bs(r.content, 'lxml')
api_names, api_links = zip(*[(item.text, 'https://www.programmableweb.com' + item['href']) for item in soup.select('.table .views-field-title a')])
descriptions = [item.text for item in soup.select('td.views-field-search-api-excerpt')]
categories = [item.text for item in soup.select('td.views-field-field-article-primary-category a')]
submitted = [item.text for item in soup.select('td.views-field-created')]
df = pd.DataFrame(list(zip(api_names, api_links, descriptions, categories, submitted)), columns = ['API name','API Link', 'Description', 'Category', 'Submitted'])
print(df)
尽管你可以这么做
pd.read_html(url)[2]
然后使用上面显示的选择器为bs4的api_链接添加额外列。如果您制作了一个数据类型、结构等的示例,其中包含重复项,这将非常有用。(一个最小的、说明性的例子)。这里的一般技术只是制作一套你拥有的任何东西,这将删除真实的副本。我不确定我是否正确理解你的意思,你想让我提供我最终数据的样本吗?事实就是这样,所以我不确定这是否有必要,因为我觉得我在网站上的行数很少,每次都有2-3行