注意:若是想爬取詳情頁的信息請按須添加方法html
import requests
import os
import re
import threading
from lxml import etree
#爬去詳情頁得HTML內容
class CnBeta(object):
def get_congtent(self,url):
#獲取網頁首頁HTML信息
r = requests.get(url)
#將獲取得HTML頁面進行解碼
html = r.content.decode('utf-8')
#返回值
return html
def xpath_html(self,html):
html = etree.HTML(html)
#利用xpath進行解析HTML模板
new_url = html.xpath("//dt/a/@href")
#定義容器把獲取到得全部詳情頁url添加到容器
url_list = []
#定義容器把截取後得文件名字添加到名字容器
name_list = []
#遍歷url列表容器
for i in new_url:
#因爲獲取到得url不一樣 利用判斷進行手動更改
if "http:" not in i:
h = "http:" + i + ".htm"
url_list.append(h)
else:
url_list.append(i)
#對獲取到得url進行鏈式切片獲取想要得字段 用來命名文件名字
file_name = i.split('/')[-1].split('.')[0]
#把獲取到的文件名字添加到名字容器
name_list.append(file_name)
#返回兩個值
return url_list,name_list
#定義方法獲取詳情頁URL
def load_html(self,url,name):
#獲取詳情頁HTML信息
r = requests.get(url)
#對詳情頁HTML信息進行解碼
html = r.content.decode("utf-8")
#把相應得HTML信息寫入指定文件夾 並把動態傳過來得文件名字直接寫入並加入指定文件後綴
with open('E:/新建文件夾/'+name+".html",'w',encoding="utf-8") as f:
f.write(html)
if __name__ == "__main__":
#實例化對象
cndeta = CnBeta()
#調用方法並傳入首頁URL
html = cndeta.get_congtent('https://www.cnbeta.com/')
#定義兩個變量分別接收方法傳過來的兩個參數
url,name = cndeta.xpath_html(html)
#循環遍歷url的個數 定義線程執行的個數 在這裏直接執行len(url)個線程
for i in range(len(url)):
#定義多線程爬去 target指定方法 args指定相應的url和文件名字
s = threading.Thread(target=cndeta.load_html,args=(url[i],name[i]))
#守護線程
s.setDaemon(True)
#執行線程
s.start()
#阻塞主線程
s.join()