繁体   English   中英

由Excel VBA命令使用Python进行抓取

[英]Scrape with Python , commanded by excel vba

我已经有一个先前的问题,但是将其粘贴到vba标签等中。因此,我希望可以重新获得知识,因此我将再次尝试使用正确的标签和标题。

问题:我需要从数据库中找到约1000个日期,其中包含植物品种数据 ,而这些数据可能在登录后,所以这里是屏幕截图 PLUTO数据库 现在,我当然可以填写此表约1000次,但是必须有一种更明智的方法来完成此操作。 如果这是一个HTML网站,我将知道该怎么做,并让vba提取结果。 我整个上午都在阅读有关这些javascript页面和ajax库的信息,但这超出了我的水平。 因此希望有人可以帮助我。 我还使用firebug来查看按搜索时的情况:

这些代码与发布的最后一张图片相似,因此更易于阅读。 代码留在此处进行复制。

f.cc.facet.limit    
-1
f.cc.facet.mincount 
1
f.end_date.facet.date.end   
2030-01-01T00:00:00Z
f.end_date.facet.date.gap   
+5YEARS
f.end_date.facet.date.oth...    
all
f.end_date.facet.date.sta...    
1945-01-01T00:00:00Z
f.end_type.facet.limit  
20
f.end_type.facet.mincount   
1
f.grant_start_date.facet....    
NOW/YEAR
f.grant_start_date.facet....    
+5YEARS
f.grant_start_date.facet....    
all
f.grant_start_date.facet....    
1900-01-01T00:00:00Z
f.status.facet.limit    
20
f.status.facet.mincount 
1
f.type.facet.limit  
20
f.type.facet.mincount   
1
facet   
true
facet.date  
grant_start_date
facet.date  
end_date
facet.field 
cc
facet.field 
type
facet.field 
status
facet.field 
end_type
fl  
uc,cc,type,latin_name,common_name,common_name_en,common_name_others,app_num,app_date,grant_start_date
,den_info,den_final,id
hl  
true
hl.fl   
cc,latin_name,den_info,den_final
hl.fragsize 
5000
hl.requireFieldMatch    
false
json.nl 
map
q   
cc:IT AND latin_name:(Zea Mays) AND den_info:Antilles
qi  
3-9BgbCWwYBd7aIWPU1/onjQ==
rows    
25
sort    
uc asc,score desc
start   
0
type    
upov
wt  
json

资源

fl=uc%2Ccc%2Ctype%2Clatin_name%2Ccommon_name%2Ccommon_name_en%2Ccommon_name_others%2Capp_num%2Capp_date
%2Cgrant_start_date%2Cden_info%2Cden_final%2Cid&hl=true&hl.fragsize=5000&hl.requireFieldMatch=false&json
.nl=map&wt=json&type=upov&sort=uc%20asc%2Cscore%20desc&rows=25&start=0&qi=3-9BgbCWwYBd7aIWPU1%2FonjQ
%3D%3D&hl.fl=cc%2Clatin_name%2Cden_info%2Cden_final&q=cc%3AIT%20AND%20latin_name%3A(Zea%20Mays)%20AND
%20den_info%3AAntilles&facet=true&f.cc.facet.limit=-1&f.cc.facet.mincount=1&f.type.facet.limit=20&f.type
.facet.mincount=1&f.status.facet.limit=20&f.status.facet.mincount=1&f.end_type.facet.limit=20&f.end_type
.facet.mincount=1&f.grant_start_date.facet.date.start=1900-01-01T00%3A00%3A00Z&f.grant_start_date.facet
.date.end=NOW%2FYEAR&f.grant_start_date.facet.date.gap=%2B5YEARS&f.grant_start_date.facet.date.other
=all&f.end_date.facet.date.start=1945-01-01T00%3A00%3A00Z&f.end_date.facet.date.end=2030-01-01T00%3A00
%3A00Z&f.end_date.facet.date.gap=%2B5YEARS&f.end_date.facet.date.other=all&facet.field=cc&facet.field
=type&facet.field=status&facet.field=end_type&facet.date=grant_start_date&facet.date=end_date

这就是HTML中的样子,至少根据Firebug:

{"response":{"start":0,"docs":[{"id":"6751513","grant_start_date":"1999-02-04T22:59:59Z","den_final":"Antilles","app_num":"005642_A 005642","latin_name":"Zea mays L.","common_name_others":["MAIS"],"uc":"ZEAAA_MAY","type":"NLI","app_date":"1997-01-10T22:59:59Z","cc":"IT"}],"numFound":1},"qi":"3-9BgbCWwYBd7aIWPU1/onjQ==","facet_counts":{"facet_queries":{},"facet_ranges":{},"facet_dates":{"end_date":{"after":0,"start":"1945-01-01T00:00:00Z","before":0,"2010-01-01T00:00:00Z":1,"between":1,"end":"2030-01-01T00:00:00Z","gap":"+5YEARS"},"grant_start_date":{"after":0,"1995-01-01T00:00:00Z":1,"start":"1900-01-01T00:00:00Z","before":0,"between":1,"end":"2015-01-01T00:00:00Z","gap":"+5YEARS"}},"facet_intervals":{},"facet_fields":{"status":{"approved":1},"end_type":{"ter":1},"type":{"nli":1},"cc":{"it":1}}},"sv":"bswa1.wipo.int","lastUpdated":1435987857572,"highlighting":{"6751513":{"den_final":["Antilles<\/em>"],"latin_name":["Zea<\/em> mays<\/em> L."],"cc":["IT<\/em>"]}}}

编辑:它使用GET方法和XMLHttpRequest,如以下屏幕截图所示: 在此处输入图片说明

在此主题中,我已经找到了如何从excel vba运行python的方法,我也下载了漂亮的汤,但是python不是我的那种语言,因此对您的帮助将不胜感激。

在对威尔的回答的评论中引用的图像 在此处输入图片说明

1)使用Excel存储您的搜索参数。

2)运行一些手动搜索,以找出需要针对每个请求更改的参数。

3)调用http get请求到您在firebug / Fiddler中找到的URL(当您手动单击“搜索”时它调用的URL)。 参见Urllib3 https://urllib3.readthedocs.org/en/latest/

3)查看Json pickle,以帮助您处理json响应,将其保存(序列化)到文件中。

4)读写数据涉及IO库。 Google是您的朋友。 (将excel文件另存为csv,然后仅读取csv文件中的搜索参数可能更容易)。

5)为您的python开发下载PyCharm-真的很好。

希望这可以帮助。

我终于弄明白了。 我不需要使用python,我可以只使用一个url,然后将内容导入excel。 我在Fiddler那里发现URL应该变成https://www3.wipo.int/pluto/user/jsp/select.jsp吗? 然后,来自OP的代码片段在后面。

我剩下的解决方案可以在我遇到的另一个问题中找到。 它不使用Python,而仅使用VBA,后者命令IE打开网站并复制网站内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM