第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

求幫助~~~捉急啊

我用的phtyon 3.5,自己改了一些地方,但結(jié)果出來是空白頁,而且不循環(huán),只抓到一個空白頁運(yùn)行結(jié)果如圖:

http://img1.sycdn.imooc.com//572554940001ddf506050603.jpg

spider_main:

import url_manager,html_downloader,html_parser,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.collect_data(new_data)
? ? ? ? ? ? ? ?if count==1000:
? ? ? ? ? ? ? ? ? ?break
? ? ? ? ? ? ? ?count=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)



url_manager:

class UrlManager(object):

? ? def __init__(self):#需要維護(hù)兩個列表-帶爬取得url列表,爬取過的url列表

? ? ? ? self.new_urls=set()

? ? ? ? self.old_urls=set()

? ??

? ? def add_new_url(self,url):#向url管理器中添加一個新的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):#向url管理器中添加批量url

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

? ? ? ? ? ? return

? ? ? ? for url in urls:#通過循環(huán)一個一個添加

? ? ? ? ? ? self.add_new_url(url)

? ? ? ? ? ??

? ? def has_new_url(self):#判斷管理器中是否有新的待爬取的url

? ? ? ? return len(self.new_urls)!=0

? ??

? ? def get_new_url(self):#從url管理器中獲取一個新的帶爬取得url

? ? ? ? new_url=self.new_urls.pop()#pop方法會從列表中獲取url并會移除

? ? ? ? self.old_urls.add(new_url)#將此url添加進(jìn)old_url

? ? ? ? return new_url

? ??



html_downloader:

import urllib

class HtmlDownloader(object):

? ? def download(self,url):

? ? ? ? if url is None:

? ? ? ? ? ? return None

? ? ? ? response=urllib.urlopen(url)#請求url內(nèi)容


? ? ? ? if response.getcode()!=200:

? ? ? ? ? ? return None

? ? ? ? return response.read()#返回下載好的內(nèi)容



html_outputer:



class HtmlOutputer(object):

? ??

? ? def __init__(self):#初始化構(gòu)造函數(shù),維護(hù)收集的數(shù)據(jù)存入數(shù)組

? ? ? ? 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')#輸出html文件


? ? ? ? fout.write("<html>")

? ? ? ? fout.write("<body>")

? ? ? ? fout.write("<table>")


? ? ? ? #ascii

? ? ? ? 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>")

? ? ? ? fout.write("</html>")


? ? ? ? fout.close()


html_parser:

from bs4 import BeautifulSoup

import re

import urllib.parse


class HtmlParser(object):


? ? 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=urllib.parse.urljoin(page_url,new_url)#自動將兩個不完整的鏈接拼成完整鏈接

? ? ? ? ? ? new_url.add(new_full_url)

? ? ? ? return new_urls


? ? def _get_new_data(self,page_url,soup):

? ? ? ? res_data={}

? ? ? ? #url

? ? ? ? res_data['url']=page_url

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

? ? ? ? title_node=soup.find('dd').find("h1")

? ? ? ? res_data['title']=title_node.get_text()

? ? ? ? #<div class="lemma-summary" label-module="lemmaSummary">

? ? ? ? summary_node=soup.find('div')

? ? ? ? res_data['summary']=summary_node.get_text()#提取數(shù)據(jù)

? ? ? ? return res_data

? ? ? ??

? ? 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



正在回答

3 回答

python3.x ?使用 ?from urllib.parse import urljoin ? ? ??

?我的gitee代碼已經(jīng)跑通可以參考下:https://gitee.com/wilbur_li/pythonspider.git

0 回復(fù) 有任何疑惑可以回復(fù)我~

python3.0用urllib.parsar

0 回復(fù) 有任何疑惑可以回復(fù)我~
將你的html_parser換成這個:
#coding:utf8
from?bs4?import?BeautifulSoup
import?re
import?urlparse

class?HtmlParser(object):
????
????
????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?=?{}
????????#url
????????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()
????????
????????#<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?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')
????????#print?soup.title
????????new_urls?=?self._get_new_urls(page_url,soup)
????????new_data?=?self._get_new_data(page_url,soup)
????????return?new_urls,new_data

url_manager中的add_new_urls函數(shù)中的if里面的url丟s了

應(yīng)該為

def add_new_urls(self,urls):#向url管理器中添加批量url

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

? ? ? ? ? ? return

? ? ? ? for url in urls:#通過循環(huán)一個一個添加

? ? ? ? ? ? self.add_new_url(url)


1 回復(fù) 有任何疑惑可以回復(fù)我~
#1

迪小仙 提問者

嗯,已經(jīng)調(diào)好了,謝謝
2016-06-08 回復(fù) 有任何疑惑可以回復(fù)我~
#2

abc的大哥 回復(fù) 迪小仙 提問者

你是怎么調(diào)的啊,我也碰到這問題了,我的是python2.7的
2018-05-04 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消
Python開發(fā)簡單爬蟲
  • 參與學(xué)習(xí)       227603    人
  • 解答問題       1284    個

本教程帶您解開python爬蟲這門神奇技術(shù)的面紗

進(jìn)入課程

求幫助~~~捉急啊

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號