我正在使用Julia,现在我正在尝试使用PyCall包,以便我可以使用BeautifulSoup模块进行Web解析。我的Julia代码看起来像
using PyCall
pyinitialize("python3")
@pyimport bs4 #need BeautifulSoup
@pyimport urllib.request as urllib #need urlopen
url_base = "blah"
html = urllib.urlopen(url_base).read()
soup = bs4.BeautifulSoup(html, "lxml")
但是,当我尝试运行它时,我会收到有关read()
功能的投诉。我首先想到read()
将是一个内置的Python函数,但pybuiltin("read")
没有用。
我不确定我可以导入哪些Python模块来获取读取功能。我尝试导入io
模块并使用io.read()
,但这不起作用。此外,使用Julia的内置阅读功能并不起作用,因为urllib.urlopen(url_base)
是PyObject
。
答案 0 :(得分:1)
你有一个错字:
html = urllib.urlopen(url_base).read()
应该是
html = urllib.urlopen(url_base)[:read]()
请参阅PyCall文档:
重要事项:与Python最大的区别在于,使用
o[:attribute]
而非o.attribute
访问对象属性/成员,以便Python中的o.method(...)
被替换在朱莉娅的o[:method](...)
。此外,您使用get(o, key)
而不是o[key]
。 (但是,您可以通过o[i]
访问整数索引,就像在Python中一样,虽然使用基于1的Julian索引而不是基于0的Python索引。)
答案 1 :(得分:0)
您需要拆分才能阅读回复。而不是:
html = urllib.urlopen(url_base).read()
尝试:
with urllib.urlopen(url_base) as response:
html = response.read()
Python 3在很大程度上提高了清晰度和可读性。