Url 没有在网页中返回正确的 html(对于我的 Java 爬虫)
Url is not returning the correct html in a webpage (for my Java crawler)
我想从网页上下载一些图片,为此我正在写一个爬虫。我为此页面测试了几个爬虫,但 none 按我的意愿工作。
第一步,我收集了770+个相机型号(parent_url
)的link,然后我想在每个link(child_urls
).但是,页面的组织方式使得 child_urls
返回与 parent_url
相同的 html。
这是我收集相机的代码links:
public List<String> html_compiler(String url, String exp, String atr){
List<String> outs = new ArrayList<String>();
try {
Document doc = Jsoup.connect(url).get();
Elements links = doc.select(exp);
for (Element link : links) {
outs.add(link.attr(atr));
System.out.println("\nlink : " + link.attr(atr));
}
} catch (IOException | SelectorParseException e) {
e.printStackTrace();
}
return outs;
}
使用此代码,我收集了 links
String expCam = "tr[class='gallery cameras'] > td[class='title'] > a[href]";
String url = "https://www.dpreview.com/sample-galleries?category=cameras";
String atr = "href";
List<String> cams = html_compiler(url, exp, atr); // This gives me the links of individual cameras
String exp2 = "some expression";
html_compiler(cams.get(0), exp2, "src"); // --> this should give me image links of the first
//camera but webpage returns same html as above
我该如何解决这个问题?我很想听听其他根据相机型号对图像进行分类的页面。 (Flickr 除外)
编辑:
例如在 java 中,以下两个 link 给出相同的 html.
https://www.dpreview.com/sample-galleries?category=cameras
https://www.dpreview.com/sample-galleries/2653563139/nikon-d1-review-samples-one
要了解如何获取图像 links,了解页面在浏览器中的加载方式很重要。如果您单击画廊 link,将触发 javascript 事件处理程序。创建的图像查看器然后从数据服务器加载图像。图片 link 是通过 javascript 请求的,因此仅通过解析 html 是看不到的。图片 links 的请求 URL 是 https://www.dpreview.com/sample-galleries/data/get-gallery
要在画廊中获取图像,您必须添加画廊 ID。画廊 ID 由画廊 link 的 href
属性提供。 link 看起来像 https://www.dpreview.com/sample-galleries/2653563139/nikon-d1-review-samples-one
。在这种情况下 2653563139
是画廊 ID。采用上面给出的 link 并将带有 ?galleryId=2653563139
的画廊 ID 添加到 URL 的末尾,以获得包含创建画廊所需的所有数据的 json 对象。在 images
数组中查找 url
字段以获取图像。
总结一下:
您从 href
属性获得的 link:https://www.dpreview.com/sample-galleries/2653563139/nikon-d1-review-samples-one
画廊编号:2653563139
请求url:https://www.dpreview.com/sample-galleries/data/get-gallery
您需要的json对象:https://www.dpreview.com/sample-galleries/data/get-gallery?galleryId=2653563139
您在 json 对象中查找的 url 对象:"url":"https://3.img-dpreview.com/files/p/TS1800x1200~sample_galleries/2653563139/7864344228.jpg"
最后是你的照片link:https://3.img-dpreview.com/files/p/TS1800x1200~sample_galleries/2653563139/7864344228.jpg
如果您需要进一步的解释,请发表评论。
我想从网页上下载一些图片,为此我正在写一个爬虫。我为此页面测试了几个爬虫,但 none 按我的意愿工作。
第一步,我收集了770+个相机型号(parent_url
)的link,然后我想在每个link(child_urls
).但是,页面的组织方式使得 child_urls
返回与 parent_url
相同的 html。
这是我收集相机的代码links:
public List<String> html_compiler(String url, String exp, String atr){
List<String> outs = new ArrayList<String>();
try {
Document doc = Jsoup.connect(url).get();
Elements links = doc.select(exp);
for (Element link : links) {
outs.add(link.attr(atr));
System.out.println("\nlink : " + link.attr(atr));
}
} catch (IOException | SelectorParseException e) {
e.printStackTrace();
}
return outs;
}
使用此代码,我收集了 links
String expCam = "tr[class='gallery cameras'] > td[class='title'] > a[href]";
String url = "https://www.dpreview.com/sample-galleries?category=cameras";
String atr = "href";
List<String> cams = html_compiler(url, exp, atr); // This gives me the links of individual cameras
String exp2 = "some expression";
html_compiler(cams.get(0), exp2, "src"); // --> this should give me image links of the first
//camera but webpage returns same html as above
我该如何解决这个问题?我很想听听其他根据相机型号对图像进行分类的页面。 (Flickr 除外)
编辑: 例如在 java 中,以下两个 link 给出相同的 html.
https://www.dpreview.com/sample-galleries?category=cameras
https://www.dpreview.com/sample-galleries/2653563139/nikon-d1-review-samples-one
要了解如何获取图像 links,了解页面在浏览器中的加载方式很重要。如果您单击画廊 link,将触发 javascript 事件处理程序。创建的图像查看器然后从数据服务器加载图像。图片 link 是通过 javascript 请求的,因此仅通过解析 html 是看不到的。图片 links 的请求 URL 是 https://www.dpreview.com/sample-galleries/data/get-gallery
要在画廊中获取图像,您必须添加画廊 ID。画廊 ID 由画廊 link 的 href
属性提供。 link 看起来像 https://www.dpreview.com/sample-galleries/2653563139/nikon-d1-review-samples-one
。在这种情况下 2653563139
是画廊 ID。采用上面给出的 link 并将带有 ?galleryId=2653563139
的画廊 ID 添加到 URL 的末尾,以获得包含创建画廊所需的所有数据的 json 对象。在 images
数组中查找 url
字段以获取图像。
总结一下:
您从 href
属性获得的 link:https://www.dpreview.com/sample-galleries/2653563139/nikon-d1-review-samples-one
画廊编号:2653563139
请求url:https://www.dpreview.com/sample-galleries/data/get-gallery
您需要的json对象:https://www.dpreview.com/sample-galleries/data/get-gallery?galleryId=2653563139
您在 json 对象中查找的 url 对象:"url":"https://3.img-dpreview.com/files/p/TS1800x1200~sample_galleries/2653563139/7864344228.jpg"
最后是你的照片link:https://3.img-dpreview.com/files/p/TS1800x1200~sample_galleries/2653563139/7864344228.jpg
如果您需要进一步的解释,请发表评论。