您的位置:首页 > 编程语言 > Python开发

分别使用Python和Java抓取百度搜索结果

2016-11-17 21:32 627 查看
    最近有了点空闲学习了下Python的语法,还别说,Java学习了一段时间之后看Python的语法简单多了。记得当时主要用C语言开发的时候,看Python的代码有点困难。

    看了下Python的语法后,试着写了个简单地爬虫程序抓取百度搜索的结果。然后用Java也写了一个相同功能的爬虫对比了一下,代码如下:

Python代码:

# coding=utf-8
import urllib.request
import urllib
import urllib.parse
from bs4 import BeautifulSoup

def get_html(url):

page = urllib.request.urlopen(url)
req = page.read()
return req

def get_news(html_text, num):

bs = BeautifulSoup(html_text, "html.parser")
body = bs.body
data = body.find('div', {'id': 'content_left'})

for i in range(1, num+1):
result = data.find('div', {'id': str(i)})
a = result.find("a")

print('------------------------------------- ' + str(i) + '------------------------------------- ')
print(a.contents)
print(a.get('href'))
print()

def getresult(num, question):

url = "http://www.baidu.com/s?wd=" + urllib.request.quote(question.encode('utf-8')) + "&rn=" + str(num)
html_doc = get_html(url)
get_news(html_doc, num)

if __name__ == '__main__':

q = "王宝强"
n = 20
getresult(n, q)

Java代码:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class Spider {

private static String urll = "http://www.baidu.com/s?wd=";

private static void getNews(String url, int num){
try {
Document doc = Jsoup.connect(url).get();
Element element = doc.getElementById("content_left");

for(int i = 1; i < (num + 1); i++){
Element result = element.getElementById(String.valueOf(i));
Elements add = result.select("a");

System.out.println("--------------------- " + i + " ---------------------");
System.out.println(add.first().text());
System.out.println(add.first().attr("href"));
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
}

private static void getResult(int num, String question){

String url = "";
try {
url = urll + URLEncoder.encode(question, "utf-8") + "&rn=" + num;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

getNews(url, num);

}

public static void main(String[] args){
getResult(20, "王宝强");
}

}

    后来我偶然用Python的爬虫搜索了下“老虎”,结果打印到第十一条的时候报错了,一脸懵逼,搜王宝强就好好地。后来查看网页源代码发现搜索结果中id为11的标签是“table”。而在python中是按标签“div”找的,所以报错了,大bug啊。但是项目又来了,又得忙了。这个先放着吧。

     总结:python代码写起来就是清爽,刚学的时候由于Java写习惯了,python中有类型转换的问题总是被忽略。python很好用也很简单,以后有时间还要多写写。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: