日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

利用python实现简单的爬虫,爬百度文库相关词条信息

發布時間:2023/12/18 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用python实现简单的爬虫,爬百度文库相关词条信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python實現爬蟲

最近由于參加學校舉辦短時速學python的比賽,學習了一遍python這門語言,原來一直認為Java語言是最牛逼的,現在發現python也有它的可取之處,它開發快,語言簡潔,對于數組的處理,讓我發現利用它開發一些簡單的程序真的比java快^^
下面,記錄一下我利用python實現爬蟲,獲取百度文庫詞條其中包含”python”信息的樣例(技術Python、Mysql)

  • 1、爬蟲架構,以及原理
    爬蟲重要的架構有三個,分別是URL管理器、網頁下載器、網頁解析器,還有一個調度器、數據輸出器
    URL管理器:管理所有的URL,負責取出URL給網頁下載器,并將該URL設定為以爬取
    網頁下載器:將互聯網對應的網頁下載到本地
    網頁解析器:解析網頁中重要的數據信息(在本樣例中為詞條信息),并且從該網頁中獲取其他符合要求的URL,存入Mysql,以便URL管理器取
    調度器:類似與java中的main方法,相當于開啟爬蟲的入口,它負責初始化第一個入口URL(地址),利用while循環依次調用URL管理器、網頁下載器、網頁解析器完成相關功能。
    數據輸出器:將得到數據輸出
    如下圖:

  • 2、代碼框架
    1、利用Mysql數據庫,
    數據庫表baike_spider,賬戶:root,密碼:0203

CREATE TABLE `baike_spider` (`webSite` varchar(255) DEFAULT NULL,`isCraw` int(1) DEFAULT '0',`title` varchar(255) DEFAULT NULL,`cont` text,KEY `webSide` (`webSite`) USING HASH ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2、源程序框架

3、爬取結果展示:

尷尬,顯示的python就兩三個。。
不過沒關系,肯定在沒顯示出來的地方^_^.

  • 3、調度器
# coding=utf-8 # import baike_sider import url_manager, html_donloader, html_parse, html_outputer import sys default_encoding = 'utf-8' if sys.getdefaultencoding() != default_encoding:reload(sys)sys.setdefaultencoding(default_encoding)class SpiderMain(object):def __init__(self):# 初始化四個管理器self.urls = url_manager.UrlManager()self.donloader = html_donloader.HtmlDonload()self.parse = html_parse.HtmlParse()self.outputer = html_outputer.HtmlOutputer()def craw(self, root_url):# 初始化urls管理器,賦初值self.urls.init_url(root_url)# 計算一個count來存儲爬蟲收集的網站個數count = 0# 當url管理器中還存在未被搜刮的網站,循環繼續while self.urls.has_new_url():try:# 從URL管理器中獲取一個新的url地址new_url = self.urls.get_new_url()# 利用網站下載器將其下載下來cont = self.donloader.donload(new_url)# 解析器解析cont網站,得到新的urls,和新的數據urls, new_data = self.parse.parse(new_url, cont)# 將新的地址存入URL管理器self.urls.add_new_urls(urls)# 輸出管理器收集這些新信息if new_data is not None:self.outputer.collect_data(new_url, new_data)# 如果爬蟲搜刮的網站個數到達1000,停止運行print "爬完%s,得到%d個新網站,得到信息%s,%s" % (new_url,len(urls),new_data.values()[0],new_data.values()[1])print "正在爬第%d個網站" % countif count == 1000:break# 統計網站個數加一count += 1except Exception,value:print "craw error :",value# 返回輸出管理器# return self.outputerprint "craw完畢"pass__name__ = "_main_"if __name__ == "_main_":root_url = "http://baike.baidu.com/item/Python"obj_spider = SpiderMain()obj_spider.craw(root_url)
  • 4、URL管理器
# coding=utf-8import MySQLdb as mdb# try: # cursor = self.db.cursor() # # self.db.commit() # except Exception,value: # self.db.rollback() # print "URLManager.__init__url: ",value # finally: # cursor.close() class UrlManager(object):def __init__(self):self.db = mdb.connect("localhost","root","0203","bigData",charset="utf8")cursor = self.db.cursor()delete_sql = '''drop table if exists baike_spider'''create_sql = '''create table if not exists baike_spider(webSite varchar(255),isCraw int(1) default '0',title varchar(255),cont text,KEY `webSide` (`webSite`) USING HASH)'''try:cursor.execute(delete_sql)cursor.execute(create_sql)cursor.execute("SET NAMES UTF8")self.db.commit()except Exception,value:print "URLManager.__init__Error: ",valueself.db.rollback()finally:cursor.close()passdef init_url(self, root_url):try:cursor = self.db.cursor()cursor.execute("SET NAMES UTF8")insert_sql = '''insert into baike_spider(webSite) values('%s')''' % root_urlcursor.execute(insert_sql)self.db.commit()except Exception,value:self.db.rollback()print "URLManager.__init__url: ",valuefinally:cursor.close()passdef has_new_url(self):new = 0try:cursor = self.db.cursor()cursor.execute("SET NAMES UTF8")select_sql = '''select isCraw from baike_spider where isCraw=0 limit 1'''new = cursor.execute(select_sql)except Exception,value:print "URLManager.has_new_url: ",valuefinally:cursor.close()# print 'new=',newreturn newpassdef get_new_url(self):url = ""try:cursor = self.db.cursor()cursor.execute("SET NAMES UTF8")select_sql = '''select * from baike_spider where isCraw=0 limit 1'''cursor.execute(select_sql)url = cursor.fetchone()[0]update_sql = '''update baike_spider set isCraw=1 where webSite='%s' '''cursor.execute(update_sql % url)self.db.commit()except Exception,value:self.db.rollback()print "URLManager.has_new_url: ",valuefinally:cursor.close()return urldef add_new_urls(self,urls):is_exist = '''select isCraw from baike_spider where webSite='%s' '''insert_sql = '''insert into baike_spider(webSite) values('%s')'''try:cursor = self.db.cursor()cursor.execute("SET NAMES UTF8")for url in urls:flag = cursor.execute(is_exist % url)if flag:continueelse:cursor.execute(insert_sql % url)self.db.commit()except Exception,value:print "URLManager.add_new_urls: ",valueself.db.rollback()finally:cursor.close()pass# urlManage = UrlManager()# urlManage.has_new_url()# urls = ["http://www.baidu.com","http://www.baidu.com4","http://www.baidu.com2","http://www.baidu.com1","http://www.baidu.com3"]# print urlManage.add_new_urls(urls)
  • 5、網頁下載器
# coding=utf-8import urllib2class HtmlDonload():def __init__(self):passdef donload(self, url):cont = ""try:response = urllib2.urlopen(url)if response.getcode()==200:#讀取網頁內容cont = response.read()#輸出內容# print contexcept Exception,value:print "HtmlDonload(),Error",valuereturn contpass # HtmlDonload().donload("http://www.baidu.com")
  • 6、網頁解析器
# coding=utf-8 import re import urlparsefrom bs4 import BeautifulSoupclass HtmlParse():def __init__(self):passdef _get_new_urls(self, page_url, soup):new_urls = set()links = soup.find_all(name='a', href=re.compile(r"/item/"))for link in links:new_url = link['href']new_full_url = urlparse.urljoin(page_url, new_url)# print "new_full_url = ",new_full_urlnew_urls.add(new_full_url)return new_urlsdef _get_new_data(self, url, soup):res_data = {}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()# print "res_data = ", res_datareturn res_datadef parse(self, url, cont):if cont is None or url is None:return# 將cont傳入生成一個beautifulSoup對象soup = BeautifulSoup(cont, 'html.parser', from_encoding='utf-8')new_urls = self._get_new_urls(url, soup)new_data = self._get_new_data(url, soup)return new_urls, new_data# parse = HtmlParse()# parse.parse("baidu.html",open("hello.html"))
  • 7、數據輸出器
# coding=utf-8import MySQLdb as mdbclass HtmlOutputer():def __init__(self):self.db = mdb.connect("localhost","root","0203","bigData",charset="utf8")passdef collect_data(self, url, new_data):try:cursor = self.db.cursor()cursor.execute("SET NAMES UTF8")insert_sql = '''update baike_spider set title='%s',cont='%s' where webSite='%s' '''data = new_data.values()cursor.execute(insert_sql % (data[0],data[1],url))self.db.commit()except Exception,value:self.db.rollback()print "HtmlOutputer.collect_data: ",valuefinally:cursor.close()passdef print_data(self):print 123try:cursor = self.db.cursor()cursor.execute("SET NAMES UTF8")insert_sql = '''select * from baike_spider where isCraw=1 '''cursor.execute(insert_sql)results = cursor.fetchall()for result in results:print result[2],result[3]self.db.commit()except Exception,value:self.db.rollback()print "HtmlOutputer.collect_data: ",valuefinally:cursor.close()pass

總結

以上是生活随笔為你收集整理的利用python实现简单的爬虫,爬百度文库相关词条信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色骚综合 | 好吊妞精品视频 | 欧美色老头old∨ideo | 四虎影院国产精品 | 日韩一级免费片 | 一本色道久久88综合日韩精品 | 亚洲欧美视频二区 | 狠狠干伊人网 | 欧美三级视频在线播放 | 三年电影在线观看 | 日日夜夜草 | 国产精品一品二品 | 婷婷在线综合 | 国产日韩一区二区三区在线观看 | 丰满人妻一区二区三区免费视频 | 最新中文字幕第一页 | 亚洲精品乱码久久久久久蜜桃不卡 | 一区二区三区视频在线 | 国产日本精品 | 日本高清免费不卡视频 | 落日余晖图片 | 久热超碰 | 玖玖在线免费视频 | 风韵少妇spa私密视频 | jizz性欧美15 | 天天干网 | 中文字幕在线视频日韩 | 欧美黑人性生活 | 欧美三级a做爰在线观看 | 国产精品夜夜 | 国产91色| 老熟妇午夜毛片一区二区三区 | 中国妇女做爰视频 | 黄色激情在线 | 午夜精品区 | 99热青青草 | 国产一级视频在线观看 | 日韩精品h | 丰满人妻在公车被猛烈进入电影 | 中文字幕免费看 | 日韩一区视频在线 | 国产精品天美传媒入口 | xx视频在线观看 | h片在线免费观看 | 国产精品高潮视频 | 亚洲av乱码一区二区 | 国产精品久久久一区二区 | 中文字幕第88页 | 日本成人毛片 | 99久久99久久精品国产片果冰 | www五月婷婷 | 免费成人深夜夜行网站视频 | 好男人www日本 | 密桃成熟时在线观看 | 天天干人人干 | 在线精品视频一区 | 欧美一区永久视频免费观看 | 日韩欧美在线看 | 天天干b | 亚洲欧美日韩一区二区三区四区 | 成人午夜剧场视频网站 | 尤物国产在线 | 熟女人妻在线视频 | 97在线免费 | 91人人草 | 国产后入清纯学生妹 | 住在隔壁的她动漫免费观看全集下载 | 一级黄色录相 | 隔壁邻居是巨爆乳寡妇 | 伊人称影院 | 欧美一级全黄 | 黄色成人一级片 | 狠狠干狠狠搞 | 亚洲午夜福利一区二区三区 | 国产精品日韩无码 | 最新av在线网站 | 日本不卡在线 | 日韩少妇裸体做爰视频 | 国产又粗又猛又爽又黄av | 91精品国产91综合久久蜜臀 | 亚洲色妞 | 91亚洲高清 | 在线精品国产 | 一区二区三区免费在线视频 | 精品午夜福利视频 | 少妇又紧又色又爽又刺激视频 | 欧美日韩一级大片 | 神马午夜视频 | 97国产视频| 美女扒开腿让人桶爽原神 | 国产成人无码a区在线观看视频 | 久久九九久精品国产免费直播 | 午夜久久久久久久久久久 | 欧日韩在线视频 | 一级全黄毛片 | 九色.com | 亚洲视频一区 | 国产精品无码av在线播放 | jizz处女|