中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中爬蟲節點的使用方法

發布時間:2020-11-30 13:59:15 來源:億速云 閱讀:256 作者:小新 欄目:編程語言

這篇文章主要介紹了python中爬蟲節點的使用方法,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

爬蟲節點相對簡單,主要包含HTML下載器、HTML解析器和爬蟲調度器。執行流程如下:

爬蟲調度器從控制節點中的url_q隊列讀取URL

爬蟲調度器調用HTML下載器、HTML解析器獲取網頁中新的URL和標題摘要

最后爬蟲調度器將新的URL和標題摘要傳入result_q隊列交給控制節點

HTML下載器

#coding:utf-8
import requests
class HtmlDownloader(object):
 
    def download(self,url):
        if url is None:
            return None
        user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
        headers={'User-Agent':user_agent}
        r = requests.get(url,headers=headers)
        if r.status_code==200:
            r.encoding='utf-8'
            return r.text
        return None

HTML解析器

#coding:utf-8
import re
import urlparse
from bs4 import BeautifulSoup
 
 
class HtmlParser(object):
 
    def parser(self,page_url,html_cont):
        '''
        用于解析網頁內容抽取URL和數據
        :param page_url: 下載頁面的URL
        :param html_cont: 下載的網頁內容
        :return:返回URL和數據
        '''
        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
 
 
    def _get_new_urls(self,page_url,soup):
        '''
        抽取新的URL集合
        :param page_url: 下載頁面的URL
        :param soup:soup
        :return: 返回新的URL集合
        '''
        new_urls = set()
        #抽取符合要求的a標簽
        links = soup.find_all('a',href=re.compile(r'/view/\d+\.htm'))
        for link in links:
            #提取href屬性
            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):
        '''
        抽取有效數據
        :param page_url:下載頁面的URL
        :param soup:
        :return:返回有效數據
        '''
        data={}
        data['url']=page_url
        title = soup.find('dd',class_='lemmaWgt-lemmaTitle-title').find('h2')
        data['title']=title.get_text()
        summary = soup.find('div',class_='lemma-summary')
        #獲取tag中包含的所有文版內容包括子孫tag中的內容,并將結果作為Unicode字符串返回
        data['summary']=summary.get_text()
        return data

爬蟲調度器

class SpiderWork(object):
    def __init__(self):
        #初始化分布式進程中的工作節點的連接工作
        # 實現第一步:使用BaseManager注冊獲取Queue的方法名稱
        BaseManager.register('get_task_queue')
        BaseManager.register('get_result_queue')
        # 實現第二步:連接到服務器:
        server_addr = '127.0.0.1'
        print('Connect to server %s...' % server_addr)
        # 端口和驗證口令注意保持與服務進程設置的完全一致:
        self.m = BaseManager(address=(server_addr, 8001), authkey='baike')
        # 從網絡連接:
        self.m.connect()
        # 實現第三步:獲取Queue的對象:
        self.task = self.m.get_task_queue()
        self.result = self.m.get_result_queue()
        #初始化網頁下載器和解析器
        self.downloader = HtmlDownloader()
        self.parser = HtmlParser()
        print 'init finish'
 
    def crawl(self):
        while(True):
            try:
                if not self.task.empty():
                    url = self.task.get()
 
                    if url =='end':
                        print '控制節點通知爬蟲節點停止工作...'
                        #接著通知其它節點停止工作
                        self.result.put({'new_urls':'end','data':'end'})
                        return
                    print '爬蟲節點正在解析:%s'%url.encode('utf-8')
                    content = self.downloader.download(url)
                    new_urls,data = self.parser.parser(url,content)
                    self.result.put({"new_urls":new_urls,"data":data})
            except EOFError,e:
                print "連接工作節點失敗"
                return
            except Exception,e:
                print e
                print 'Crawl  fali '
 
if __name__=="__main__":
    spider = SpiderWork()
    spider.crawl()

感謝你能夠認真閱讀完這篇文章,希望小編分享python中爬蟲節點的使用方法內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

衡山县| 玉环县| 太保市| 太谷县| 灵石县| 四会市| 乌海市| 墨脱县| 嵊泗县| 桃江县| 宽城| 五寨县| 祁阳县| 称多县| 达拉特旗| 宁都县| 巴中市| 天柱县| 谢通门县| 桃园县| 宜兰市| 龙陵县| 达尔| 易门县| 鲁山县| 滕州市| 齐齐哈尔市| 宽甸| 东乌珠穆沁旗| 安远县| 萍乡市| 泰顺县| 淄博市| 留坝县| 吉木萨尔县| 潜江市| 濉溪县| 乳山市| 福清市| 七台河市| 灵璧县|