我正在尝试抓取此页面:
https://github.com/search?p=1&q=https%3A%2F%2Fsonarcloud.io%2Fdashboard&type=Code
并且我需要使用我的电子邮件和密码进行身份验证。
我尝试这样做:
auth = {:usarname => "username", :password => "password"}
a = HTTParty.get(url, :basic_auth)
但这并没有像预期的那样对我进行身份验证。
为什么这不起作用,我该如何解决?
我想检索该信息,并且在Github API上不可用:
答案 0 :(得分:0)
不要抓取GitHub。爬网很脆弱,而且对于大量使用JavaScript的网站来说非常尴尬。
改为使用its API:
https://api.github.com/search/code?q=https%3A%2F%2Fsonarcloud.io%2Fdashboard
但是,要搜索所有存储库,您仍然需要authenticate。您需要将auth
哈希传递到HTTParty.get()
中:
auth = {:username => "username", :password => "password"}
a = HTTParty.get(url, :basic_auth => auth)
# ^ Here
习惯上来说,这看起来像
auth = {username: "username", password: "password"}
a = HTTParty.get(url, basic_auth: auth)
您还有一个错字-usarname
,而不是username
,这是我在版本中已解决的问题。
编辑:如果您要检索特定的匹配文本,文件和行,则仍然不必刮擦其HTML。相反,您可以set your Accept
header to application/vnd.github.v3.text-match+json
:
url = "https://api.github.com/search/code"
query = {q: "https://sonarcloud.io/dashboard"}
auth = {username: "username", password: "password"}
headers = {"Accept" => "application/vnd.github.v3.text-match+json"}
a = HTTParty.get(url, query: query, basic_auth: auth, headers: headers)
现在,响应应提供一个包含哈希的text_matches
键,其中fragment
s显示匹配的文本以及object_type
s(例如"FileContent"
),{{1} } s和object_url
。
在我已经提供的search code链接中也提到了这一点:
搜索代码时,当您传递
indices
媒体类型时,可以获取文件 content 和文件 path 的文本匹配元数据。有关如何接收突出显示的搜索结果的更多详细信息,请参见Text match metadata。