Python开发爬⾍完整代码解析
Python开发爬⾍完整代码解析
移除python
三天时间,总算开发完了。说道爬⾍,我觉得有⼏个东西需要特别注意,⼀个是队列,告诉程序,有哪些url要爬,第⼆个就是爬页⾯,肯定有元素缺失的,这个究其原因我并不理解,为什么爬源代码还会爬下来页⾯缺元素闭合标签。但是概率特别⼩。第三个就是,报错重跑机制,经常会出现页⾯urlerror10004报错,其实就是⽹页打不开,打不开的原因也许是⽹络,也许是服务器切断服务,所以,我们还是需要重新爬这个url,⼀般呢在爬⼀次就⾏了,但是,有时候,需要爬两次,这点,遇到过⼀次场景。
但是有了报错重跑机制,⽆论多少次,都⼀样可以跑下来的。⽽且可以记录下来是哪⼀个url重新跑了。
那⾏,我们来看看所有完整代码,600,爬⾍,额,在这⾥,我感觉哈,爬哪⼀个⽹站的事情,不能过多的说。
再者,我们爬⽹页数据下来之后,据说是要做⽤户画像,给客户打标签。
其实这篇⽂档的 产⽣是在开发完之后,我们周⼀写的,时效性已经差了两天,当时遇到的困难,以及代码的攻克、bug的印象已经忘记⼀些了,所以还是强调,攻城拔寨需要加班,攻城拔寨需要⽂档。(说在开发中写⽂档显然不太现实,当时是频繁调试,遇到太多问题,写⽂档会浪费⼤量时间)
闲话不多了,开始吧。第⼀步骤的python爬⾍,我们爬的是⽹页的两个主页⾯。这中间也许有我没有解释的代码,也都会在后⽂给出解释,因为从⽆到有是⼀步⼀步实现,可能再后来再说可配置的事情⽐较好。
移除第⼀部分代码
i mport urllib2
import ConfigParser
导⼊url类库和python读取配置⽂件库,读取配置⽂件位置后,读取具体url位置,并且读取将来把⽣成的队列的⽂件也⼀并从配置⽂件中读
取出来。那么python的配置⽂件,我们粘贴⼀下。
移除python配置⽂件
先不要看step3的,否则会不理解。
url=appUrl
result=getPage(url)
txt=appHtmlPath
f = open(txt,"w+")
f.write(result)
print 'success app ! '
我们调⽤了
def getPage(url):
request = urllib2.Request(url)
response = urllib2.urlopen(request)
ad()
使⽤urllib2的request⽅法发送url请求,并且得到响应response。然后,python声明变量得到的将会被⾃动装箱(我⽤Java的名词来解释这种特性,但是显然,python要更加⼈性化)当然,我并⾮说Java或者python哪⼀个好,要知道,这并不是我们关⼼的。
接着看代码,我们
txt=appHtmlPath
f = open(txt,"w+")
f.write(result)
print 'success app ! '
这四句,读取⽣成⽂件位置,将这个⾸页全部读取,然后写到⽂件中。当然,⾸页是有两个,⼀个⼿机应⽤软件,⼀个是⼿机游戏软件。好,我们去看看页⾯,和⽣成的页⾯。
谢霆锋张柏芝
移除源⽹页
上⾯是源⽹页,然后我们看看爬下来的html⽂件
移除html⽂件
然后第⼀部分,结束,是不是很简单呢?那就开始第⼆步,从这些所有的html中获取到href和title两个元素,咱们要⽤的。第⼆部分代码粘贴:
package step;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.jsoup.Jsoup;
import des.Document;
import org.jsoup.select.Elements;
潇湘书院穿越小说
/**
* 该类⽤于将爬⾍爬下来的app和game两个url拼接到⼀个txt⽂件⾥⾯,并且,去重
* @author lishouzhuang
家庭教师同人文*
*/
public class step2 {
public static void doStep2(Map propertisPathmap) throws IOException{
读取配置文件失败
/
/ ⾸先设置app的url
String app_url = (String) ("app_url");
// ⾸先设置app的url
String game_url = (String) ("game_url");
// 在设置⽣成位置
String successUrl = (String) ("successUrl");
ifFileHave(successUrl, 1);//检查是否存在
//提前在第三步之前创建他要⽤的⽂件
String allHtmlPath = (String) ("allHtmlPath");
// //设置⽣成⽂件路径名称位置,需要去解析路径
ifFileHave(allHtmlPath, 2);//检查是否存在
List listApp = readHtmlToTxt(app_url);
List listGame = readHtmlToTxt(game_url);
//将game的list循环依次添加到app的list⾥⾯,后⾯⽤以去重
for(int i=0;i<listGame.size();i++){
listApp.(i));
}
//调⽤removeDuplicateObj⽅法,以去除listApp中包括listGame中⼤量重复的元素List newList = removeDuplicateObj(listApp);
System.out.println("no repeat url number :"+newList.size());
//将list传给write()⽅法,并且将元素写到txt⽂件中,并且带⼊⽣成⽂件⽬录
write(successUrl,newList);
System.out.println("Done!");
}
/**
* 公共⽅法,获取app和game的html⾥⾯所有的url
* 返回list
* @param url
* @throws IOException
*/
public static List readHtmlToTxt(String url) throws IOException{
//获取html的⽂件,转成Jsoup对象
File input = new File(url);
Document doc = Jsoup.parse(input, "UTF-8", "test/");
/
/得到所有应⽤分类的所有div⾥的访问地址集合董洁婚纱照
Elements eleApp = ElementsByClass("parent-cate");
赖滢羽457List list = new ArrayList();