003 在eclipse编写第一个项目:网页爬虫

说明:支持中文 # coding=gbk

创建项目:File->New->Project->PyDev->PyDev Project

新建项目名称:任意。新建package名称:wangyepachong

创建5个Module文件:

在项目中用到的所有模块,都需要在eclipse中添加:windows->preferences->PyDev->Interpreters->Python Interpreter   找到Forced Builtins 中添加需要导入的模块:

    比如:bs4  urllib2  re  等

html_dowanloader.py

html_outputer.py

html_parser.py

spider_main.py

url_manager.py

第一个文件:spider_main.py

# coding=gbk

‘‘‘

简单爬虫架构

URL管理器

网页下载器,urllib2

网页解析器:BeautifulSoup

这只是最简单的爬虫!!!

--后期,需要登录的,验证码,Ajax,服务器防爬虫,多线程,分布式

‘‘‘

import __main__

from wangyepachong import url_manager

from wangyepachong import html_downloader

from wangyepachong import html_parser

from wangyepachong import html_outputer

class SpiderMain(object):

def __init__(self):

self.urls = url_manager.UrlManager()

self.downloader = html_downloader.HtmlDownloader()

self.parser = html_parser.HtmlParser()

self.outputer = html_outputer.HtmlOutputer()

def craw(self,root_url):

count = 1

self.urls.add_new_url(root_url)

while self.urls.has_new_url():

try:

new_url = self.urls.get_new_url()

print ‘craw %d : %s‘ %(count ,new_url)

html_cont = self.downloader.download(new_url)

new_urls,new_data = self.parser.parse(new_url,html_cont)

self.urls.add_new_urls(new_urls)

self.outputer.collectdata(new_data)

if count == 1000:

break

count = count + 1

except:

print ‘craw faild‘

self.outputer.output_html()

if __main__ =="__main__":

root_url = "http://baike.baidu.com/view/21087.htm"

obj_spider = SpiderMain()

obj_spider.craw(root_url)

第二个文件:html_dowanloader.py

# coding=gbk

import urllib2

class HtmlDownloader(object):

def download(self,url):

if url is None:

return None

response = urllib2.urlopen(url)

if response.getcode() != 200:

return None

return response.read()

第三个文件:html_parser.py

# coding=gbk

from bs4 import BeautifulSoup

import re

import urlparse

class HtmlParser(object):

def parse(self,page_url,html_cont):

if page_url is None or html_cont is None:

return

soup = BeautifulSoup(html_cont,‘html.parser‘,form_encoding=‘utf-8‘)

new_urls = self._get_new_urls(page_url,soup)

new_data = self._get_new_data(page_url,soup)

return new_urls,new_data

def _get_new_urls(self,page_url,soup):

new_urls = set()

#/view/123.htm

links = soup.find_all(‘a‘,href=re.compile(r"/view/\d+\.htm"))

for link in links:

new_url = link[‘href‘]

new_full_url = urlparse.urljoin(page_url,new_url)

new_urls.add(new_full_url)

return new_urls

def _get_new_data(self,page_url,soup):

#创建一个字典,用于存放数据

res_data ={}

#

res_data[‘url‘]= page_url

#<dd class="lemmaWgt-lemmaTitle-title"><h1>Python</h1>

title_node = soup.find(‘dd‘,class_="lemmaWgt-lemmaTitle-title").find("h1")

res_data[‘title‘] = title_node.get_text()

summary_node = soup.find(‘div‘,class_="lemma-summary")

res_data[‘summary‘] = summary_node.get_text()

return res_data

第四个文件:url_manager.py

# coding=gbk

class UrlManager(object):

def __init__(self):

self.new_urls = set()

self.old_urls = set()

def add_new_url(self,url):

if url is None:

return

if url not in self.new_urls and url not in self.old_urls:

self.new_urls.add(url)

def add_new_urls(self,urls):

if urls is None or len(urls)==0:

return

for url in urls:

self.add_new_url(url)

def has_new_url(self):

return len(self.new_urls)!= 0

def get_new_url(self):

new_url = self.new_urls.pop()

self.old_urls.add(new_url)

return new_url

第五个文件:html_outputer.py  

# coding=gbk

class HtmlOutputer(object):

def __init__(self):

self.datas = []

def collect_data(self,data):

if data is None:

return

self.datas.append(data)

def output_html(self):

fout = open(‘output.html‘,‘w‘)

fout.write("<html>")

fout.write("<body>")

fout.write("<table>")

for data in self.datas:

fout.write("<tr>")

fout.write("<td>%s</td>" % data[‘url‘])

fout.write("<td>%s</td>" % data[‘title‘].encode(‘utf-8‘))

fout.write("<td>%s</td>" % data[‘summary‘].encode(‘utf-8‘))

fout.write("</tr>")

fout.write("</table>")

fout.write("</body>")

问题1:编写完成后有条语句报错,但是后期自己就没有问题了

title_node = soup.find(‘dd‘,class_="lemmaWgt-lemmaTitle-title").find("h1")

问题2:目前代码没有报错,但是不能运行,可能因为逻辑没有完全分析清楚,后期再修改细节,使该项目可以运行

时间: 2024-10-13 02:57:33

003 在eclipse编写第一个项目:网页爬虫的相关文章

Eclipse中的Web项目自动部署到Tomcat

一.原因. 1.写java程序有一段时间了,但很久没用eclipse了,所以使用eclipse编写的web项目部署到tomcat 的方式也不是很清楚,下面记录一下将Eclipse 上的web项目自动部署到tomcat 上的方式: 二.部署问题 1.这里就有个问题,是怎么把Eclipse中的网站项目自动部署到tomcat中.在Eclipse中做的Web项目默认是不支持将项目发布到Web服务器上的,会发布到工作空间的某个目录下,因此无法在外部启动Tomcat来运行Web项目,只有打开Eclipse中

Eclipse中的Web项目自己主动部署到Tomcat

一.原因. 1.写java程序有一段时间了,但非常久没用eclipse了.所以使用eclipse编写的web项目部署到tomcat 的方式也不是非常清楚,以下记录一下将Eclipse 上的web项目自己主动部署到tomcat 上的方式: 二.部署问题 1.这里就有个问题.是怎么把Eclipse中的站点项目自己主动部署到tomcat中. 在Eclipse中做的Web项目默认是不支持将项目公布到Webserver上的,会公布到工作空间的某个文件夹下,因此无法在外部启动Tomcat来执行Web项目,仅

django之创建第3个项目:编写第一个模板文件

1.django结构 2.在站点blog下创建templates文件夹,专门用于存放模板文件 3.在templates文件夹下创建index.html文件 #index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>第一个模板文件</title> </head> <body&

HTML5新手入门教程,使用记事本编写第一个网页

· 背景 趁着处于学生狗时代又是在暑假期间,我们刚刚好利用这个时间来学习一下另一个对于我现在还没接触过的领域,那就是网页编程.虽然说我想做一名Android工程师,但是现在Android开发的跨平台性使得Android编程不再仅仅局限于原生开发.我个人学习Android已经将近一年了,记得从去年的暑假,自己拿了学校讲课的书一边敲一边学习Android基础.后来因为书内容有限,自己又买了<第一行代码第二版>来自学,现在Android基础知识也基本学习完了. 因为对于Android的兴趣比较高,自

5.Maven和Eclipse整合(两种方式进行插件的安装),Maven相关设置,Eclipse下创建Maven项目

 1  第一种方式是:在连网的情况下,通过在helpàInstall下安装. 新的地址是:http://download.eclipse.org/technology/m2e/releases 2  第二中方式是: 通过插件配置的方式进行安装插件. A  将maven所需的插件放到maven的安装目录下,截图如下: B 在Eclipse的dropins目录下创建以下三个插件: 三个文件中的内容分别是: m2e.txt path=E:/Installed/apache-maven-3.1.0/

Eclipse搭建Meven web项目

开发环境 jdk 1.7.0_80 windows10 eclipse-jee-mars,其中这个版本的eclipse自带maven,所以去tm那些手动安装maven的,配置maven环境变量的,讲解setting的,配置仓库的,学习完这些,早特么不想写代码了,先让我们跑起来第一个项目再边做边学习maven原理和高级功能吧 第一步new 一个maven项目 eclipse--> new--> other--> 输入 maven,next下一步 默认,next下一步 这个页面选择webap

Eclipse中的Web项目自己主动部署到Tomcat以及怎样在Eclipse中使用My Eclipseproject

我是一个新手学习Java,servlet和Jsp. 痛苦的是我时候一个.net程序猿,习惯了微软的VS IDE一切都是封装好的.傻瓜式的使用, 不须要关心内部实现. 悲催的是我看到资料都是My Eclipse, 但我下载使用的环境是Eclipse.这就有两个问题要解决. 一个是怎样把My Eclipse的东西同步到Eclipse上, 另外一个是版本号控制问题.我的环境我认为比較奇葩(Tomca6.0.45+J2ee1.8.25). 在这个过程中遇到的问题较多,以下就找一个先突破吧. 怎样部署Se

Eclipse+python的安装与使用(详细阐述了eclipse编写Python程序的基本功能及技巧)

安装环境说明: 操作系统:win7 JDK:jdk1.7.0_11 下载网址:http://www.oracle.com/technetwork/java/javase/downloads/index.html Eclipse:eclipse-jee-kepler-SR2-win32-x86_64 下载网址: http://www.eclipse.org/downloads/ http://www.eclipse.org/downloads/download.php?file=/technolo

将Eclipse中的java项目转移到Linux下运行

有些java项目考虑到性能的需求或者需要调用shell脚本等,需要在Linux系统下运行.完成Eclipse中的java项目到Linux系统下迁移需要一些操作: 1.将Eclipse下的java项目源码打包成jar,可以有两种方式,但是建议第一种有利于管理关联的jar包. 方法1:使用maven 1)保证该java项目是一个maven项目,关联的jar包都位于lib下并已引入到.classpath和pom.xml中. 2)右键项目->Debug->Debug Configurations,在B