单线程爬虫案例。
抓取电影网站(可更改)的片名、演员、电影图片、上映时间,以D:\电影\演员数\演员名\[上映时间]+作品名.jpg的方式保存。
多线程会提高爬取网页速度,但提高保存图片速度的效果不明显,磁盘读写是单磁头,多线程无法提高速度。固态硬盘会略有提高。
未更改请求头,会报403错误,绝大多数网站拦截爬虫请求
conn.setRequestProperty(“User-Agent”, “Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)”);
注意:爬虫次数过多可能会被目标网站拦截ip,报403错误,1天后恢复(此案例大约5000次后被封禁ip)建议使用动态的代理ip爬取,30000次未拦截
动态代理可用http://www.goubanjia.com/,其网站有java的多线程爬虫案例
package pachong.main;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Pachong {
//main方法
public static void main(String[] args) throws Exception{
Pachong p=new Pachong();
p.papa();
}
//爬虫方法
public void papa() throws Exception{
String url="https://avmoo.xyz/cn/movie/";
BinaryTest b=new BinaryTest();
while (true){
//计数器,将d:\count.txt里保存的数字(例如:300000)转换成35进制的数字(因为我要爬取的网站的最后面是35进制的数字)
// (例如ttps://avmoo.xyz/cn/movie/70EF),所以调用方法将例如300000转换成35进制然后拼接url,去爬各个主网站下的子网页
//每爬一次count.txt的数字就会-1,用于计数和防止爬重复页面
int all=cou();
String ls=String.valueOf(all);
String newall=b.transRadix(ls,10,35);
String newurl=url+newall;
System.out.println(newurl);
//到这里就生成了新url
//开始爬
try {
URL u=new URL(newurl);
URLConnection conn=u.openConnection();
//将爬虫的请求模仿成浏览器用户请求,防止浏览器