网页抓取解密(网页内磁力链接软件界面如下图:获取磁力链接 )
优采云 发布时间: 2022-01-02 14:18网页抓取解密(网页内磁力链接软件界面如下图:获取磁力链接
)
最近,我从某个视频资源网站下载了*敏*感*词*。大约有30集。如果手动需要把每一集的磁链一个一个复制下来下载,比较麻烦,所以写了这个提取磁链的小工具。
理论上,任何在html代码中支持磁力链接的网页,可能会因为一些特殊的反爬虫措施或其他保护措施而无法获取。
由于磁链下载速度可能会因为资源太少而变慢,下一步就是使用百度云的API将提取的磁链添加到百度云离线下载中,然后使用Pandownload等工具进行下载。
目前可以先用这个程序提取磁力链接,再用百度云批量离线脚本(%E7%99%BE%E5%BA%A6%E7%BD%91%E7%9B%98% E6%89 %B9%E9%87%8F%E7%A6%BB%E7%BA%BF)批量创建离线下载,但是字数太多好像报错,需要一段时间。
我不经常使用java,一般不做UI,所以技术很弱。请见谅,如果您有任何问题或建议,欢迎讨论!
网页中的磁力链接
软件界面如下:
获取磁力链接
百度云批量离线脚本:
在 URL 框中输入收录磁性链接的 URL,然后单击“确定”。一段时间后,所有磁力链接将在下面的框中输出。有时由于网络等原因,无法获取所有网页代码,并显示“未获取所有内容”。这个时候应该可以稍等片刻再试。然后复制下面提取的磁力链接,打开迅雷(如果遇到版权问题,论坛上有迅雷破解版)即可下载。
下载链接:链接:密码:plaf
请注意:如果您的电脑已经安装了JAVA环境,则只需要下载里面的jar包即可。如果没有,则需要下载rar压缩包并运行里面的exe文件。
源代码:
[Java] 纯文本视图复制代码
package getMagnet;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.regex.Pattern;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.regex.Matcher;
final class ReadHtml extends Thread{
public String pageUrl, encoding;
public StringBuffer[] html;
ReadHtml(String _pageUrl, String _encoding, StringBuffer[] _html) {
pageUrl = _pageUrl;
encoding = _encoding;
html = _html;
}
@Override
public void run() {
try {
URL url = new URL(pageUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(false);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod("GET");
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36");
conn.connect();
int code = conn.getResponseCode();
if(code!=HttpURLConnection.HTTP_OK){
throw new Exception("HttpURLConnection Error! Response Code = "+code);
}
InputStreamReader isr = new InputStreamReader(conn.getInputStream(), encoding);
BufferedReader in = new BufferedReader(isr);
String line;
while((line = in.readLine())!=null) {
html[0].append(line);
}
in.close();
conn.disconnect();
}catch(Exception e) {
System.err.println(e);
}
}
}
public class GetMagnet {
private JFrame frame;
private JTextField URL;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GetMagnet window = new GetMagnet();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public GetMagnet() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setResizable(false);
frame.setTitle("\u83B7\u53D6\u78C1\u529B\u94FE\u63A5");
frame.setBounds(100, 100, 672, 502);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JLabel lblNewLabel = new JLabel("URL");
lblNewLabel.setBounds(10, 23, 54, 15);
frame.getContentPane().add(lblNewLabel);
URL = new JTextField();
URL.setBounds(63, 20, 511, 21);
frame.getContentPane().add(URL);
URL.setColumns(1000);
JTextArea Magnet = new JTextArea();
Magnet.setBounds(63, 58, 583, 396);
JScrollPane scrollMagnet = new JScrollPane(Magnet);
scrollMagnet.setBounds(63, 58, 583, 396);
scrollMagnet.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollMagnet.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
frame.getContentPane().add(scrollMagnet);
JButton OK = new JButton("OK");
OK.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
StringBuffer html[] = {new StringBuffer()};
ReadHtml rh = new ReadHtml(URL.getText(), "UTF-8", html);
boolean success = false;
try {
rh.start();
for(int i=5;i>0;--i) {
frame.setTitle("\u83B7\u53D6\u78C1\u529B\u94FE\u63A5\uFF08\u7B49\u5F85"+i+"\u79D2...\uFF09");
rh.join(1000);
}
if(rh.isAlive()) {
rh.stop();
success = false;
}else {
success = true;
}
} catch (Exception ex) {
System.err.println(ex);
}
String html0 = html[0].toString();
int index = 0;
StringBuffer magnets = new StringBuffer();
int count = 0;
String regex = "magnet:\\?xt=urn:btih:[A-za-z0-9]{40,40}";
final Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
final Matcher matcher = pattern.matcher(html0);
LinkedList MagnetList = new LinkedList();
while(matcher.find()) {
String temp = matcher.group();
boolean exist = false;
for(String Magnet:MagnetList) {
if(Magnet.equals(temp)) {
exist = true;
break;
}
}
if(!exist) {
magnets.append(temp+"\n");
MagnetList.add(temp);
++count;
}
}
if(success) {
frame.setTitle("\u83B7\u53D6\u78C1\u529B\u94FE\u63A5\uFF08\u5DF2\u83B7\u53D6"+count+"\u6761\uFF09");
}else {
frame.setTitle("\u83B7\u53D6\u78C1\u529B\u94FE\u63A5 \u672A\u83B7\u53D6\u6240\u6709\u5185\u5BB9\uFF0C\u8bF7\u91CD\u8BD5\uFF01\uFF08\u5DF2\u83B7\u53D6"+count+"\u6761\uFF09");
}
Magnet.setText(magnets.toString());
}
});
OK.setBounds(584, 19, 62, 23);
frame.getContentPane().add(OK);
JLabel lblNewLabel_1 = new JLabel("Magnet");
lblNewLabel_1.setBounds(10, 62, 54, 15);
frame.getContentPane().add(lblNewLabel_1);
}
}