歡迎大家指正哈,有需要改進的大家提一下.
import requests
import html
from pathlib import Path
from time import sleep
from html.parser import HTMLParser
class MyParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.text=""
self.links=""
self.dic=dict()
self.cont=0
def close(self):
self.text=""
self.links=""
HTMLParser.close(self)
def handle_starttag(self, tag, attrs):
if tag == "a":
if len(attrs) == 0:
pass
else:
for item, value in attrs:
self.dic[item]=value
try:
if self.dic['id']=="nextpage":
self.links=self.dic['href']
except KeyError:
pass
finally:
self.dic.clear()
elif tag=="div":
pass
elif tag=="title":
self.cont=1
def handle_endtag(self, tag):
if tag=="title":
self.cont=0
def handle_data(self, data):
if self.cont==1:
self.text+=data
def handle_comment(self, data):
self.cont=1 if datahttps://bbs.csdn.net/topics/=="go" else 0
def handle_decl(self, data):
pass
def handle_startendtag(self,tag, attrs):
pass
if __name__ == '__main__':
mypar = MyParser()
pt=Path.cwd()
filename=pt/"gqz.txt"
p='https://www.yunyue.cc'
start='/book/65128/42550051'
with open(filename,mode='a',encoding='utf-8') as fp:
for i in range(300):
url=p+start
reps=requests.get(url)
if reps.ok:
mypar.feed(reps.text)
print(mypar.text,file=fp)
start=mypar.links
mypar.close()
sleep(0.5)
print("================",file=fp)
print(i,end=" ")
uj5u.com熱心網友回復:
沒開多執行緒,不能隨便啟停下一步學習scrapy吧
uj5u.com熱心網友回復:
我是剛學會走,慢跑快跑還差得遠呢.正學習幾個有名的三方庫.scrapy也在計劃中,還是謝謝你
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
有個問題探討一下.
我上面的程式中下一頁的地址是在當前某個位置保存,這樣能開多執行緒嗎?如果有一個文章目錄將每頁的地址列出,這時感覺可以開多執行緒.
另外多執行緒運行時只能有一個執行緒執行,感覺效率不高.不知理解對否.
uj5u.com熱心網友回復:
1.多執行緒有多執行緒鎖,所以我一般使用多行程,
2.多行程需要傳入一個可迭代的東西,比如串列,所以我都是分三步走。
第一步,把小說的資訊存下來,存到資料庫
第二部,讀取小說資訊,把章節資訊搞下來
第三步,讀取章節資訊,把章節內容搞下來。,
每一個資料都加上狀態,就可以任意啟停,開啟多行程爬去了。
這是我,目前的水平,更高級的方法就不知道了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/18222.html
下一篇:求解?
