我以前也发布过一个类似的问题,但在修改了项目之后,我发现:
有两个csv文件(新建.csv,刮刀.csv)-
刮刀.csv包含两列:
'scraper\u dom'=特定URL域的简化
'scraper\u id'=用于将URL导入单独管理的数据库的关联scraper\u id
我的目标是迭代新建.csv(使用urlparse
解析出fnetloc
),并在上执行查找刮刀.csv返回一组匹配的'scraper\u id'给定一组'url'(VLOOKUP的工作方式,或SQL中的连接),一旦urlparse
做了,就需要在URL中隔离netloc(结果是fnetloc
)。你知道吗
我的下一个大问题是urlparse
不解析url(来自新建.csv)中找到的精确简化刮刀.csv文件,所以我将依赖于一种部分匹配,直到我能够找出用于该部分的正则表达式。你知道吗
我已经导入了pandas
,因为以前的尝试发现我创建了数据帧并执行了pd.merge
,但是我也无法让它工作。。。你知道吗
当前代码,底部注释掉的部分是失败的尝试,我只是想包括我迄今为止尝试过的内容。
(##
只是我放进去检查程序输出的中间print
行)
import pandas as pd, re
from urllib.parse import urlparse
import csv
sd = {}
sid = {}
#INT = []
def fnetloc(any):
try:
p = urlparse(any)
return p.netloc
except IndexError:
return 'Error'
def dom(any):
try:
r = any.split(',')
return r[0]
except IndexError:
return 'Error'
def ids(any):
try:
e = any.split(',')
return e[0]
except IndexError:
return 'Error'
with open('scrapers.csv',encoding='utf-8',newline='') as s:
reader = enumerate(csv.reader(s))
s.readline()
for j, row in reader:
dict1 = dict({'scraper_dom':dom(row[0]), 'scraper_id':ids(row[1])})
sid[j + 1] = dict1
for di in sid.keys():
id = di
##print(sid[di]['scraper_dom'],sid[di]['scraper_id'])
with open('new.csv',encoding='UTF-8',newline='') as f:
reader = enumerate(csv.reader(f))
f.readline()
for i, row in reader:
dict2 = dict({'scraper_domain': fnetloc(row[0])})
sd[i + 1] = dict2
for d in sd.keys():
id = d
##print(sd[d]['scraper_domain'])
#def tryme( ):
#return filter(sd.has_key, sid)
#print(list(filter(sid, sd.keys())))
所需输出的样本。你知道吗
您只需要一个过程,该过程可以获取一个fnetloc和一个scraper列表,并检查是否有与该fnetloc匹配的scraper:
我还建议您使用一些类,而不是将所有内容都保存在csv行对象中,从长远来看,这样可以减少代码中的错误,并大大提高您的理智。你知道吗
这个脚本处理了我输入的示例数据:
相关问题 更多 >
编程相关推荐