[英]Scrape with Python , commanded by excel vba
我已经有一个先前的问题,但是将其粘贴到vba标签等中。因此,我希望可以重新获得知识,因此我将再次尝试使用正确的标签和标题。
问题:我需要从数据库中找到约1000个日期,其中包含植物品种数据 ,而这些数据可能在登录后,所以这里是屏幕截图 。 现在,我当然可以填写此表约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.