• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

按照课程写的爬虫程序但是输出没有任何结果?

主程序:
from baidubaike import url_manger, html_download, html_parser, html_outputer




class SpiderMain(object):
    def __init__(self):
        self.urls = url_manger.UrlManager()
        self.downloader = html_download.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.collect_data(new_data)
               
                if count == 1000:
                    break
                count +=1
            except:
                print('craw failed')
        self.outputer.output_html()
   
   






if __name__ =="main":
    root_url = "http://baike.baidu.com/view/21087.htm"
    obj_spider = SpiderMain()
    obj_spider.craw(root_url)
parser程序:

from bs4 import BeautifulSoup
import re
from urllib.parse import urljoin
class HtmlParser(object):
   


   def _get_new_urls(self, page_url, soup):
       res_data = {}
      
       res_data['url'] = page_url
       #Python


       title_node = soup.find('dd',class_="lemmaWgt-lemmaTitle-title").find("h1")
       res_data['title'] = title_node.get_text()
       #<div class="lemma-summary" label-module="lemmaSummary">
       summary_node = soup.find('div',class_="lemma-summary")
       res_data['summary'] = summary_node.get_text()
       return res_data
   
   def _get_new_data(self, page_url, soup):
       new_urls = set()
       links = soup.find_all('a',re.compile(r'/view/\d+\.htm'))
       for link in links:
           new_url = link['href']
           new_full_url = urljoin(page_url,new_url)
           new_urls.add(new_full_url)
       return new_urls
   def parse(self,page_url,html_cont):
       if page_url is None or html_cont is None:
           return
         
       soup = BeautifulSoup(html_cont,'html.parser',from_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
outputer程序:
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('')
       fout.write('')
       fout.write('')
       for data in self.datas:
           fout.write('')
           fout.write('%s'% data['url'].encode('utf-8'))
           fout.write('%s'% data['title'].encode('utf-8'))
           fout.write('%s'% data['summary'].encode('utf-8'))
       fout.write('')
       fout.write('')
       fout.write('')

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

全部参与2

楼主问题解决了吗,我也出现了一样的问题

使用道具 举报

楼主问题解决了么~我现在也遇到了相同的问题~~

使用道具 举报

发新帖

发布任务需求已有1031166位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!