Web scraping 我如何在Julia中进行网页抓取?
我想从列表中提取大学及其网站的名称 在Python中,我使用BeautifulSoup v4实现了这一点:Web scraping 我如何在Julia中进行网页抓取?,web-scraping,julia,Web Scraping,Julia,我想从列表中提取大学及其网站的名称 在Python中,我使用BeautifulSoup v4实现了这一点: 导入请求 从bs4导入BeautifulSoup 作为pd进口熊猫 page=requests.get('https://thebestschools.org/features/best-computer-science-programs-in-the-world/') content=BeautifulSoup(page.text,'html.parser') 学院名称=[] 学院链接=
导入请求
从bs4导入BeautifulSoup
作为pd进口熊猫
page=requests.get('https://thebestschools.org/features/best-computer-science-programs-in-the-world/')
content=BeautifulSoup(page.text,'html.parser')
学院名称=[]
学院链接=[]
学院名称列表=内容。查找所有('h3',class='college')
对于学院名称列表中的学院:
如果是大学。查找('a'):
college\u name.append(college.find('a').text)
college_link.append(college.find('a')['href']))
我非常喜欢Julia中的编程,因为它与Python非常相似,我想知道我是否也可以在Julia中进行web抓取。任何帮助都将不胜感激。是的
为了实现web抓取,Julia有三个库:
- 下载网站的前端源代码(这与python的
库相当)请求
- 要将下载的源代码解析为层次结构对象
- 并最终使用CSS选择器API进行刮取
h3
位于
中,而当前在Cascadia.jl中没有实现SelectorType
您的python代码不能正常工作。 我想这个网站最近已经更新了。 因为据我所知,他们已经删除了链接,。 下面是一个使用and的类似示例 我正在使用内置命令下载网页。 将其写入临时文件中的磁盘,然后将其读入字符串。 它使用起来可能更干净,可以直接将其读入字符串。但对于这个简单的例子来说,这很好
using Gumbo
using Cascadia
url = "https://thebestschools.org/features/best-computer-science-programs-in-the-world/"
page = parsehtml(read(download(url), String))
college_name = String[]
college_location = String[]
sections = eachmatch(sel"section", page.root)
for section in sections
maybe_col_heading = eachmatch(sel"h3.college", section)
if length(maybe_col_heading) == 0
continue
end
col_heading = first(maybe_col_heading)
name = strip(text(last(col_heading.children)))
push!(college_name, name)
loc = first(eachmatch(sel".school-location", section))
push!(college_location, text(loc[1]))
end
[college_name college_location]
输出
好像它两次上了麻省理工学院。
可能我的演示中的过滤代码不是很安静。
但是:耸耸肩:我听说麻省理工学院是一所很棒的大学。
Julia就是在那里发明的:joy:提示:永远不要问存在哪些包可以在堆栈溢出时执行X操作。总是问如何做X。有两个原因:1.购物问题很快就解决了。2获得更好的答案,展示如何使用软件包或标准库函数。如果您想探索自己,请访问pkg.julialang.org并在搜索字段中键入“html”。还有“xml”。您会发现许多包允许您探索类似xml的文档。非常确定您可以使用Cascadia来实现这一点。我认为
span
本身就可以很好地工作?通过CSS样式选择器也值得指出的是,一个人可以通过julia中的python接口使用beautifulsoup本身。@tasos可能会给出一个单独的答案,说明如何做到这一点?@LyndonWhite呃,我确信在没有我添加另一个的情况下,已经有足够多的糟糕的pycall示例了…:P
julia> [college_name college_location]
51×2 Array{String,2}:
"Massachusetts Institute of Technology (MIT)" "Cambridge, Massachusetts"
"Massachusetts Institute of Technology (MIT)" "Cambridge, Massachusetts"
"Stanford University" "Stanford, California"
"Carnegie Mellon University" "Pittsburgh, Pennsylvania"
⋮
"Shanghai Jiao Tong University" "Shanghai, China"
"Lomonosov Moscow State University" "Moscow, Russia"
"City University of Hong Kong" "Hong Kong"