我需要查看一大堆图片,看看他们是否有关键字.任何人都可以推荐一个好的,可靠的OCR库吗?我很乐意为了准确而牺牲速度.
我正在使用jsoup创建一个类,它将执行以下操作:
下面是我正在尝试做的粗略工作,而不是非常粗糙,因为我一直在尝试很多不同的事情
public class ParsePage {
private String path;
Connection.Response response = null;
private ParsePage(String langLocale){
try {
response = Jsoup.connect(path)
.userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")
.timeout(10000)
.execute();
} catch (IOException e) {
System.out.println("io - "+e);
}
}
public int getSitemapStatus(){
int statusCode = response.statusCode();
return statusCode;
}
public ArrayList<String> getUrls(){
ArrayList<String> urls = new ArrayList<String>();
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我可以获取页面状态,但是使用构造函数中已经打开的连接我不知道如何解析文档,我尝试使用:
Document doc = connection.get();
Run Code Online (Sandbox Code Playgroud)
但那是不行的.有什么建议?或者更好的方法来解决这个问题?
使用HttpClient获取URL状态的最快方法是什么?我不想下载页面/文件,我只想知道页面/文件是否存在?(如果是重定向,我希望它遵循重定向)
我有点像菜鸟,所以请耐心等待.我试图立即在Internet Explorer中打开很多网址.大约40个网址.
我有一个我的网址数组,我正在使用以下代码:
for (int i = 0; i < urls.length; i++){
java.awt.Desktop.getDesktop().browse(java.net.URI.create(urls[i]));
}
Run Code Online (Sandbox Code Playgroud)
如果我已经打开IE,这可以完美地工作.但是,如果它尚未打开,则会创建40个新窗口,而不是制表符.我试图通过使用以下方法解决它:
for (int i = 0; i <= 9; i++){
java.awt.Desktop.getDesktop().browse(java.net.URI.create(urls[i]));
try {
Thread.currentThread().sleep(200);
} catch (InterruptedException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个应用程序来从网站上的多个页面中删除内容.我正在使用JSoup进行连接.这是我的代码:
for (String locale : langList){
sitemapPath = sitemapDomain+"/"+locale+"/"+sitemapName;
try {
Document doc = Jsoup.connect(sitemapPath)
.userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")
.timeout(10000)
.get();
Elements element = doc.select("loc");
for (Element urls : element) {
System.out.println(urls.text());
}
} catch (IOException e) {
System.out.println(e);
}
}
Run Code Online (Sandbox Code Playgroud)
一切都在大部分时间都很完美.但是,我希望能够做一些事情.
首先,有时404状态将返回或500状态可能是301.使用下面的代码,它将只打印错误并移动到下一个URL.我希望能够做的是尝试返回所有链接的url状态.如果页面连接打印200,如果不打印相关的状态代码.
其次我有时会发现这个错误"java.net.SocketTimeoutException:read timed out"我可以增加我的超时但是我宁愿尝试连接3次,在第3次失败时我想将URL添加到"失败"数组所以我可以在将来重试失败的连接.
知识比我更多的人可以帮助我吗?
我经常要在我工作的网站上运行测试用例.大多数时候我只需要检查网站上是否存在元素,或者我必须抓取网站的一些数据.到目前为止,我一直在使用Jsoup来完成这项工作.
我最近被介绍给Selenium Webdriver.我一直在阅读它,但我只想弄清楚何时最好使用它.在像我这样的情况下,检查页面上是否存在元素或者抓取数据我认为我仍然会更好地使用Jsoup?Selenium最适合填写表单并点击网站上的按钮?
我使用 laravel 5.4 和最新版本的 yajra/laravel-datatables 作为服务。
我让它在页面上的一个数据表上运行良好。我想创建一个包含不相关表的仪表板。用户、产品、预订等
我希望我的控制器看起来像这样:
public function index(ProductsDataTable $productDatatable, UsersDataTable $userDatatable)
{
$user = Auth::user();
$products = $user->products;
return view('admin.dashboard', compact('products', 'user', 'productDatatable', 'userDatatable'));
}
Run Code Online (Sandbox Code Playgroud)
在我的刀刃上做
@section('content')
{!! $productDatatable->table() !!}
{!! $userDatatable->table() !!}
@endsection
@push('scripts')
{!! $dataTable->scripts() !!}
@endpush
Run Code Online (Sandbox Code Playgroud)
然而这显然是行不通的。我不确定如何继续。
我尝试为每个数据表创建一条路线,但不确定如何从仪表板控制器引用它。
我正在尝试使用JSoup来抓取临时服务器上的一些页面.要使用浏览器查看登台服务器上的页面,我需要连接到VPN.
我连接到VPN,但是当我使用JSoup尝试抓取页面时,它会保持超时.如何让我的程序使用VPN连接.或者在这里我还有其他什么我没有想到的?
注意:我也在程序的另一部分使用HttpClient.有没有办法我可以设置我的程序连接到VPN /代理程序初始化,所以JSoup和HttpClient都使用VPN /代理.
谢谢
我在使用JSoup连接到网址时遇到了问题.
我试图测试的网址是www.xbox.com/en-US/security,这是302(我认为)重定向到 http://www.xbox.com/en-US/Live/Account-Security.我已经设置了jsoup来跟随重定向并使用.headers("location")获取新的url.返回的网址是/ en-US/Live/Account-Security.我不知道如何处理它,我的代码如下:
while (i < retries){
try {
response = Jsoup.connect(checkUrl)
.userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")
.followRedirects(false)
.timeout(10000)
.execute();
success = true;
break;
} catch (SocketTimeoutException ex){
timeout = true;
} catch (MalformedURLException ep){
malformedUrl = true;
}catch (IOException e) {
statusCode = 404;
}
}
private void getStatus(){
if (success){
statusCode = response.statusCode();
success = false;
}
if (statusCode >= 300 && statusCode <= 399){
//System.out.println("redirect: " +statusCode + " " …Run Code Online (Sandbox Code Playgroud) 我有一个包含用户和产品的应用程序。只有产品所有者才能查看产品。
如果用户猜测产品 ID,他们可能能够查看该产品。例如
http://booker.app/admin/products/32
Run Code Online (Sandbox Code Playgroud)
点击该链接将允许任何登录用户查看 ID 为 32 的产品。
这是有问题的路线:
Route::middleware(['middleware' => 'auth'])->prefix('admin')->group(function(){
Route::resource('products', 'ProductController');
});
Run Code Online (Sandbox Code Playgroud)
我的产品控制器显示方法:
public function show(Product $product)
{
if($product->user_id !== Auth::user()->id){
return $this->forbidden('admin/products');
}
return $this->makeResponse('admin.products.product', compact('product'));
}
Run Code Online (Sandbox Code Playgroud)
禁止和 makeResponse 函数只是检查请求是否是 ajax 请求,如果是则返回 json。
正如您所看到的,我正在使用路由模型绑定,并且正在检查授权用户是否与产品 user_id 相同。基本上有没有更好的方法来检查用户是否是产品的所有者。
我想知道哪种方法在性能和最佳实践方面是正确的.
我有一系列的URL,我正在抓取这些页面的内容.我有一个单独的类来处理刮擦.
目前我将数组列表传递给类,然后该类循环遍历数组内容,为每个数组抓取内容.我相信这是最好的方式.
我想到的另一种方法是循环遍历数组,我会将每个URL传递给类.这似乎对我来说会慢一些,但我不确定.
如果这两种方法都可行,那么他们的专业和骗局是什么?
我正在使用JSoup连接到网站.我有时会发现 JSoup会有连接超时,当发生这种情况时我想 JSoup重试连接,当它第3次失败时它会在数组列表中添加一个字符串.
我的代码目前是:
try {
Document doc = Jsoup.connect(sitemapPath)
.userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")
.timeout(10000)
.get();
Elements element = doc.select("loc");
return element;
} catch (IOException e) {
return null;
}
Run Code Online (Sandbox Code Playgroud)
我想用while循环做一些事情,但我必须返回元素,所以我不确定如何做到这一点.
我有3个哈希集.goodLinkSet,badLinkSet和testLinkSet.
goodLinkSet包含一个有效的URL列表,badLinkSet包含一个不起作用的URL列表.testLinkSet包含一个URL列表,我需要检查它们是否良好,这里的一些链接已经在其他两个集中进行了测试.
我想要做的是删除testLinkSet中出现在goodLinkSet和badLinkSet中的所有字符串/链接,这样我就不会多次测试URL.我希望尽可能快速有效地完成这项工作.每个循环的A似乎有点慢.
什么是最有效的运行方式?有什么功能可以帮我吗?任何建议将非常感谢!
java ×11
jsoup ×6
connection ×3
performance ×3
httpclient ×2
laravel ×2
php ×2
arrays ×1
browser ×1
class ×1
datatables ×1
hashset ×1
ocr ×1
proxy ×1
selenium ×1
tabs ×1
url ×1
vpn ×1
web-scraping ×1