分别使用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很好用也很简单,以后有时间还要多写写。
看了下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很好用也很简单,以后有时间还要多写写。
相关文章推荐
- python3爬取百度搜索结果url,获得真实url,提取网页正文并分词,多进程的使用
- python,抓取百度搜索结果
- Python实现抓取百度搜索结果页的网站标题信息
- 使用python抓取百度搜索、百度新闻搜索的关键词个数
- python使用get在百度搜索并保存第一页搜索结果
- Python实现抓取百度搜索结果页的网站标题信息
- java正则表达式的使用-抓取百度搜索的结果
- 使用HtmlUnit抓取百度搜索结果
- Python抓取百度搜索结果
- 使用python解析百度搜索结果
- python 抓取百度搜索结果的快照排名信息
- python使用get在百度搜索并保存第一页搜索结果
- python使用get在百度搜索并保存第一页搜索结果
- 用python和BeautifulSoup抓取百度搜索结果10-20页面中的网站链接
- python抓取google搜索结果
- Python抓取百度热搜索词
- 用java代码实现百度搜索返回结果条数
- 用google工具栏搜索结果转到百度?(更新,使用OpenDNS已解决)
- python爬取百度搜索结果
- 《程序员的第一年》---------- 【抓取网页数据】定时查寻淘宝搜索结果并用excel记录下来(HttpWebRequest与正则等的使用)