爬虫抓取网页图片

使用爬虫抓取艺术猫网页上的图片,信息

package com.yishu.site.cnrenti;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.GetMethod;
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.AndFilter;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.ImageTag;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import org.yuxiong.utils.commonshc.MyGetMethod;

import com.yishu.commons.Domian;
import com.yishu.commons.Globals;

/**
* 艺术猫(http://www.ysmao.com)
* @author fuyun
* 2009-8-15
*/
public class PictureParser extends GetMethod{


public PictureParser(String uri) {
super(uri);
}

// <div id="content">
// <div class="onetd noBorder">
private static final NodeFilter CONTENT_DIV_ID = new AndFilter(
new TagNameFilter("div"), new HasAttributeFilter("id","content"));
private static final NodeFilter ONETD_DIV_CLASS = new AndFilter(
new TagNameFilter("div"), new HasAttributeFilter("class","onetd noBorder"));

private static final NodeFilter FILTER_A = new TagNameFilter("a");
private static final NodeFilter FILTER_IMG = new TagNameFilter("img");


public static String one(String url,int i,String type) throws HttpException, IOException{

MyGetMethod method = new MyGetMethod(url);
Globals.getClient(Domian.CNRENTI).executeMethod(method);
String body = method.getResponseBodyAsString();
Parser mobileParser = Parser.createParser(body, Globals.CHARSET_UTF8);
try {
NodeList nodeList = mobileParser.parse(CONTENT_DIV_ID);
Parser nodeParser1 = Parser.createParser(nodeList.toHtml(), Globals.CHARSET_UTF8);

NodeList aNlist1 = nodeParser1.parse(FILTER_A);
//System.out.println(aNlist1.toHtml());
if(aNlist1 != null && aNlist1.size()>0){
Node aNode2 = aNlist1.elementAt(aNlist1.size()-1);
LinkTag link2 = (LinkTag)aNode2;
int yeshu = Integer.parseInt(link2.getLink().split(".htm")[0].split("_")[1]);
System.out.println("页数:"+yeshu);
if(yeshu > 0){
for(int a=1;a<yeshu+1;a++){
url = "http://www.ysmao.com/ystype/"+i+"_"+a+".htm";
two(type,url);
}
}
}
} catch (ParserException e) {e.printStackTrace();
}
return new String(body.getBytes(Globals.CHARSET_UTF8));

}


public static String two(String type,String url) throws HttpException, IOException{

MyGetMethod method = new MyGetMethod(url);
Globals.getClient(Domian.CNRENTI).executeMethod(method);
String body = method.getResponseBodyAsString();
Parser mobileParser = Parser.createParser(body, Globals.CHARSET_UTF8);
try {
NodeList nodeList = mobileParser.parse(CONTENT_DIV_ID);
Parser nodeParser1 = Parser.createParser(nodeList.toHtml(), Globals.CHARSET_UTF8);

NodeList aNlist1 = nodeParser1.parse(ONETD_DIV_CLASS);
//System.out.println("aNlist1 = "+aNlist1.toHtml());
if(aNlist1 != null && aNlist1.size()>0){
for(int aa=0;aa<(aNlist1.size()-1);aa++){
Node aNode2 = aNlist1.elementAt(aa);
//NodeList aNlist1 = aNode2.parse(FILTER_SPAN);
Long click = Long.parseLong(aNode2.getLastChild().getChildren().elementAt(0).getChildren().elementAt(1).getChildren().toHtml());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
Date submittime = sdf.parse(aNode2.getLastChild().getChildren().elementAt(2).getChildren().elementAt(1).getChildren().toHtml());
String subuser = aNode2.getLastChild().getChildren().elementAt(1).getChildren().elementAt(1).getChildren().toHtml();
String titlelist = aNode2.getChildren().elementAt(1).getChildren().elementAt(0).toPlainTextString();
String surl = aNode2.getChildren().elementAt(1).getChildren().elementAt(0).getText().split("/htm")[1];
String strurl = "http://www.ysmao.com/htm"+surl.substring(0, surl.length()-1);
System.out.println("图片分类 = "+type);
System.out.println("[组]标题 = "+titlelist);
System.out.println("[组]地址 = "+strurl);
System.out.println("点击次数 = "+click);
System.out.println("上传者 = "+subuser);
System.out.println("上传时间 = "+submittime);

picture(type,titlelist,strurl,click,subuser,submittime);
}
}
} catch (ParserException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
return new String(body.getBytes(Globals.CHARSET_UTF8));
}


public static String picture(String type,String titlelist,String strurl,Long click,String subuser,Date submittime) throws HttpException, IOException{

MyGetMethod method = new MyGetMethod(strurl);
Globals.getClient(Domian.CNRENTI).executeMethod(method);
String body = method.getResponseBodyAsString();
Parser mobileParser = Parser.createParser(body, Globals.CHARSET_UTF8);
try {
NodeList nodeList = mobileParser.parse(CONTENT_DIV_ID);
Parser nodeParser1 = Parser.createParser(nodeList.toHtml(), Globals.CHARSET_UTF8);

NodeList aNlist1 = nodeParser1.parse(ONETD_DIV_CLASS);
//System.out.println(aNlist1.toHtml());
if(aNlist1 != null && aNlist1.size()>0){
for(int aa=0;aa<(aNlist1.size());aa++){
Node aNode2 = aNlist1.elementAt(aa);
//System.out.println(aNode2.toHtml());
String name = aNode2.getChildren().elementAt(0).getChildren().elementAt(0).getChildren().toHtml().split("名称:")[1];

System.out.println("图片名 = "+name.substring(0, name.length()-2));

Parser nodeParser11 = Parser.createParser(aNlist1.toHtml(), Globals.CHARSET_UTF8);
NodeList aNlist11 = nodeParser11.parse(FILTER_IMG);
Node aNode11 = aNlist11.elementAt(aa);
ImageTag img = (ImageTag)aNode11;
//String bigPicUrl = img.getImageURL().substring(0, img.getImageURL().length()-10)+"big/"+img.getImageURL().substring(img.getImageURL().length()-10, img.getImageURL().length());
System.out.println("小图片 = "+img.getImageURL());
if(img.getImageURL().split("/").length == 5){
String pic = img.getImageURL().split("/")[0]+"/"+img.getImageURL().split("/")[1]+"/"+img.getImageURL().split("/")[2]+"/"+img.getImageURL().split("/")[3];
String bigPicUrl = pic+"/big/"+img.getImageURL().split("/")[4];
System.out.println("大图片 = "+bigPicUrl);
}

//System.out.println("大图片 = "+bigPicUrl+"\n");
}
}
} catch (ParserException e) {
e.printStackTrace();
}
return new String(body.getBytes(Globals.CHARSET_UTF8));
}


public static void main(String[] arge) throws HttpException, IOException{

String type = "";
for(int i=1;i<9;i++){
if(i == 1) type = "东方人体";
else if(i == 2) type = "西方人体";
else if(i == 3) type = "人体彩绘";
else if(i == 4) type = "油画艺术";
else if(i == 5) type = "素描艺术";
else if(i == 6) type = "雕塑艺术";
else if(i == 7) type = "水墨艺术";
else if(i == 8) type = "其它艺术";
one("http://www.ysmao.com/ystype/"+i+"_1.htm",i,type);

}
}
}
基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
### Python 爬虫抓取网页图片代码示例 为了实现从网页抓取图片的功能,可以利用 `requests` 库发起 HTTP 请求并下载目标页面的内容。接着通过解析 HTML 文档中的 `<img>` 标签来定位图像 URL,并使用 `urllib.request.urlretrieve()` 函数保存这些图片到本地磁盘。 下面是一个完整的例子: ```python import os from urllib.request import urlretrieve from bs4 import BeautifulSoup import requests def download_images_from_webpage(url, save_folder='images'): if not os.path.exists(save_folder): os.makedirs(save_folder) try: response = requests.get(url) soup = BeautifulSoup(response.content, 'html.parser') img_tags = soup.find_all('img') # 获取所有的<img>标签 for index, img_tag in enumerate(img_tags): img_url = img_tag['src'] # 处理相对路径的情况 if not img_url.startswith('http'): base_url = '/'.join(url.split('/')[:-1]) + '/' img_url = base_url + img_url file_name = f"{save_folder}/image_{index}.jpg" urlretrieve(img_url, file_name) # 下载图片至指定位置 except Exception as e: print(f"Error occurred while downloading images from {url}: ", str(e)) download_images_from_webpage("https://example.com") # 将此链接替换为你想要爬取的目标网站地址[^2] ``` 这段脚本会创建一个名为 `images` 的文件夹用来存储所下载下来的每一张图片;如果该目录已经存在,则不会重复创建。对于每一个找到的 `<img>` 标记,都会尝试提取其 `src` 属性作为实际要访问的资源链接。考虑到某些情况下 src 可能只是相对于当前文档的位置而不是绝对 URI ,因此还需要做额外判断处理以确保能够正确构建最终请求网址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值