成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Python多進(jìn)程批量爬取小說代碼分享

本篇內(nèi)容介紹了“Python多進(jìn)程批量爬取小說代碼分享”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

為五蓮等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及五蓮網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、五蓮網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

使用python多進(jìn)程跑同樣的代碼。

python中的多線程其實(shí)并不是真正的多線程,如果想要充分地使用多核CPU的資源,在python中大部分情況需要使用多進(jìn)程。Python提供了非常好用的多進(jìn)程包multiprocessing,只需要定義一個(gè)函數(shù),Python會(huì)完成其他所有事情。借助這個(gè)包,可以輕松完成從單進(jìn)程到并發(fā)執(zhí)行的轉(zhuǎn)換。multiprocessing支持子進(jìn)程、通信和共享數(shù)據(jù)、執(zhí)行不同形式的同步,提供了Process、Queue、Pipe、Lock等組件。

1. Process

創(chuàng)建進(jìn)程的類:Process([group [, target [, name [, args [, kwargs]]]]]),target表示調(diào)用對(duì)象,args表示調(diào)用對(duì)象的位置參數(shù)元組。kwargs表示調(diào)用對(duì)象的字典。name為別名。group實(shí)質(zhì)上不使用。
方法:is_alive() 、join([timeout])、run()、start()、terminate()。其中,Process以start()啟動(dòng)某個(gè)進(jìn)程。

is_alive():判斷該進(jìn)程是否還活著

join([timeout]):主進(jìn)程阻塞,等待子進(jìn)程的退出, join方法要在close或terminate之后使用。

run():進(jìn)程p調(diào)用start()時(shí),自動(dòng)調(diào)用run()

屬性:authkey、daemon(要通過start()設(shè)置)、exitcode(進(jìn)程在運(yùn)行時(shí)為None、如果為–N,表示被信號(hào)N結(jié)束)、name、pid。其中daemon是父進(jìn)程終止后自動(dòng)終止,且自己不能產(chǎn)生新進(jìn)程,必須在start()之前設(shè)置。

下面的demo。爬取筆趣閣小說網(wǎng),只是爬了4本小說,同時(shí)啟動(dòng)四個(gè)線程。啟動(dòng)的方式有點(diǎn)low.為了統(tǒng)計(jì)時(shí)間,所以就那么寫, 有什么更好的方法可以留言,歡迎指導(dǎo)。

Python多進(jìn)程批量爬取小說代碼分享

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/1/3 17:15
# @Author  : jia.zhao
# @Desc    :
# @File    : process_spider.py
# @Software: PyCharm
from multiprocessing import Process, Lock, Queue
import time

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import requests
from lxml import etree


exitFlag = 0
q = Queue()
chrome_options = Options()
chrome_options.add_argument('--headless')

class scrapy_biquge():
   def get_url(self):
       browser = webdriver.Chrome(chrome_options=chrome_options)
       browser.get('http://www.xbiquge.la/xuanhuanxiaoshuo/')
       # 獲取小說
       content = browser.find_element_by_class_name("r")
       content = content.find_elements_by_xpath('//ul/li/span[@class="s2"]/a')
       for i in range(len(content)):
           # 小說名字
           title = content[i].text
           # 小說的url
           href = content[i].get_attribute('href')
           print(title + '+' + href)
           # 裝進(jìn)隊(duì)列
           q.put(title + '+' + href)
           if i == 3:
               break
       browser.close()
       browser.quit()


def get_dir(title, href):

   time.sleep(2)
   res = requests.get(href, timeout=60)
   res.encoding = 'utf8'
   novel_contents = etree.HTML(res.text)
   novel_dir = novel_contents.xpath('//div[@id="list"]/dl/dd/a//text()')
   novel_dir_href = novel_contents.xpath('//div[@id="list"]/dl/dd/a/@href')
   path = 'novel/' + title + '.txt'
   list_content = []
   i = 0
   for novel in range(len(novel_dir)):
       novel_dir_content = get_content('http://www.xbiquge.la'+novel_dir_href[novel])
       print(title, novel_dir[novel])
       list_content.append(novel_dir[novel] + '\n' + ''.join(novel_dir_content) + '\n')
       i = i + 1
       if i == 2:
           try:
               with open(path, 'a', encoding='utf8') as f:
                   f.write('\n'.join(list_content))
                   f.close()
               list_content = []
               i = 0
           except Exception as e:
               print(e)


def get_content(novel_dir_href):
   time.sleep(2)
   res = requests.get(novel_dir_href, timeout=60)
   res.encoding = 'utf8'
   html_contents = etree.HTML(res.text)
   novel_dir_content = html_contents.xpath('//div[@id="content"]//text()')
   return novel_dir_content


class MyProcess(Process):
   def __init__(self, q, lock):
       Process.__init__(self)
       self.q = q
       self.lock = lock

   def run(self):
       print(self.q.qsize(), '隊(duì)列大小')
       print('Pid: ' + str(self.pid) + ' LoopCount: ')
       self.lock.acquire()

       while not self.q.empty():

           item = self.q.get()
           print(item)
           self.lock.release()
           title = item.split('+')[0]
           href = item.split('+')[1]
           try:
               get_dir(title, href)
           except Exception as e:
               print(e, '出現(xiàn)異常跳過循環(huán)')
               continue
if __name__ == '__main__':
   start_time = time.time()
   print(start_time)
   scrapy_biquge().get_url()
   lock = Lock()

   p0 = MyProcess(q, lock)
   p0.start()
   p1 = MyProcess(q, lock)
   p1.start()
   p2 = MyProcess(q, lock)
   p2.start()
   p3 = MyProcess(q, lock)
   p3.start()
   p0.join()
   p1.join()
   p2.join()
   p3.join()

   end_time = time.time()
   print(start_time, end_time, end_time - start_time, '時(shí)間差')

Python多進(jìn)程批量爬取小說代碼分享

使用多進(jìn)程中的隊(duì)列處理,實(shí)現(xiàn)進(jìn)程間數(shù)據(jù)共享。代碼應(yīng)該可以直接運(yùn)行
,有問題可以留言

“Python多進(jìn)程批量爬取小說代碼分享”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

本文名稱:Python多進(jìn)程批量爬取小說代碼分享
文章網(wǎng)址:http://jinyejixie.com/article12/jdogdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站制作、虛擬主機(jī)、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營
长子县| 井研县| 淮阳县| 石河子市| 桓台县| 贺兰县| 同仁县| 长垣县| 越西县| 长阳| 江山市| 绥江县| 凌源市| 教育| 高淳县| 大宁县| 牙克石市| 郧西县| 海林市| 凤山市| 天全县| 通城县| 和顺县| 云龙县| 莲花县| 文山县| 利辛县| 大安市| 威信县| 交口县| 古蔺县| 乐亭县| 商水县| 汉阴县| 南宫市| 虎林市| 宁化县| 美姑县| 六盘水市| 临汾市| 阿勒泰市|