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

歡迎訪問 生活随笔!

生活随笔

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

python

python多线程爬斗破苍穹

發布時間:2023/12/14 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python多线程爬斗破苍穹 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 一、分析網頁
  • 二、源代碼
  • 三、結果
  • 總結


前言

上星期《斗破蒼穹》終于出了,等了這么久,但是呢對于我這種沒看過小說的人來說覺得看完之后不過癮,于是就有了這一片文章…


提示:以下是本篇文章正文內容,下面案例可供參考

一、分析網頁

分析一級頁面發現,右鍵查看網頁源代碼就可以得到想要的內容,包括名字和url。但前面有九個是我們不需要的而且url只有后面一部分,所以我們需要跳過前面九個然后再給其他的url進行一個拼接。

分析二級頁面,按下F12,發現內容都在一個div節點下。

此處的# 在html中意思是空格
既然分析到位了,那我們就開始辦正事吧。

二、源代碼

# -!- coding: utf-8 -!- import re import requests import time from fake_useragent import UserAgent #user-agent庫 from threading import Thread #多線程 from lxml import etree #xpathclass Doupo:def __init__(self):self.url = 'https://www.tycqxs.com/57_57672/' #一級頁面self.headers = {'User-Agent':UserAgent().random} #生成一個隨機的請求頭self.url_head = 'https://www.tycqxs.com' #二級頁面的前綴self.urls = [] #儲存urlself.names = [] #儲存名字#請求網頁def get_html(self,url):response = requests.get(url=url,headers=self.headers).content.decode('utf-8','ignore') #向url發起請求并得到響應內容return response #返回響應#用re解析網頁def parse_html(self,html,regex):info = regex.findall(html) #在html中找regex并得到一個列表 列表中是結果return info #返回找到的結果#用xpath提取具體頁面的內容def xpath_html(self,i):while self.urls: #創建循環 如果列表里面有內容就會一直循環 直到沒有內容就會結束循環url = self.urls.pop(0) #執行一次便刪除第一個urlname = self.names.pop(0) #執行一次便刪除一個name 這里url和name是對應的html = etree.HTML(self.get_html(url)) #將url傳給請求函數得到響應內容 然后將內容轉化為Element對象content = html.xpath('//*[@id="content"]/text()') #得到這個標簽下的所有內容for e in content: #遍歷所有內容with open('./斗破蒼穹/'+name,'a+',encoding='utf-8') as f: #打開在本目錄下的斗破蒼穹文件夾創建(或在創建好的文本下追加)以utf-8的模式寫入f.write(' '*7+e.strip()+'\n') #為了美觀 先去頭尾空格換行 再在前面加空格 后面換行(因為如果直接寫入那么兩行內容中間空太多行了)print("{}完成一個任務!".format(i)) #打印線程幾完成了一個任務time.sleep(0.1) #每次執行完停0.1秒#創建多線程def jobs(self):jobs = [] #創建一個列表用來儲存線程for i in range(16): #創建16個線程a = Thread(target=self.xpath_html,args=(i,)) #執行self.xpath_html函數 并傳給一個參數i給它jobs.append(a) #在列表中加入線程a.start() #啟動線程[i.join() for i in jobs] #執行完成以后回收線程#主函數def run(self):one_html = self.get_html(self.url) #向一級頁面發起請求,并得到響應內容regex = re.compile("<dd><a href='(.*?)' >(.*?)</a></dd>", re.S) #創建模式對象 第一空匹配url(只有后綴) 第二空匹配章節名字info = self.parse_html(one_html,regex) #將響應內容和模式對象傳給解析的函數parse_html 返回一個列表for i in info[9:]: #列表的前九個是一些介紹就不需要了 所以從第十個開始遍歷if i[1][0] != '第': #排除中間的一些廣告(如果開頭第一個字不是“第”那么就跳過它)continueelse: #如果是就執行這一步url = self.url_head+i[0] #將二級頁面的前綴和它結合一起成為一個完整的urlself.urls.append(url) #將這個url添加到self.urls中name = ''.join(i[1].split(' '))+'.txt' #拼接文件名(第一章 隕落的天才)--> (第一章隕落的天才.txt)self.names.append(name) #將拼接的文件名加入self.names中#待上面的url和name都加入完成之后 用多線程來執行、爬取內容self.jobs()if __name__ == '__main__':spider = Doupo()spider.run() #調用方法

三、結果


總結

本文用了re和xpath解析,多線程爬取數據。
如有不對的地方還望各位大佬指出,謝謝。

總結

以上是生活随笔為你收集整理的python多线程爬斗破苍穹的全部內容,希望文章能夠幫你解決所遇到的問題。

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