from lxml import etree
from selenium.webdriver.support.wait import webdriverwait
from selenium.webdriver.support import expected_conditions as es
from selenium.webdriver.common.by import by
from queue import queue
from selenium import webdriver
from threading import thread
import os
class
biquge()
:def
__init__
(self,base_url)
: self.base_url = base_url
self.driver = webdriver.phantomjs(
)#30隱性等待時間,如果30秒,目標位置還沒載入完成就取消執行
self.wait = webdriverwait(self.driver,30)
self.get_article_num(
)def
get_etree_by_xpath
(self,url,xpath)
: self.driver.get(url)
target = self.wait.until(es.presence_of_element_located(
(by.xpath,xpath)))
html = self.driver.page_source
html_tree = etree.html(html)
return html_tree
# 根據文章的型別建立資料夾
defcreate_dir_write
(self,text=
none
,article_type=
none
,filename=
none
,l=)
:#只要不重新賦值給l l的值會儲存不會變化
# 如果有型別l為空
if article_type:
# 如果資料夾存在直接寫入
if os.path.exists(
'./article/%s'
%(l[-1
])):
# 寫入檔案檔名
with
open
('./article/%s/%s.txt'
%(l[-1
], filename)
,'a+'
, encoding=
'utf-8'
)as h:
h.write(text)
# os.mkdir('./article/%s/%s' %(l[0],filename))
else
:# 先建立型別的目錄
os.makedirs(
'./article/%s'
%(article_type)
)def
get_list_one
(self, lst)
:if lst:
return lst[0]
.strip(
)return
''#獲取每章的內容
defarticle_zhang_detail
(self,article_zhang_name,article_zhang_url,article_name)
: article_detail_etree = self.get_etree_by_xpath(article_zhang_url,
'//div[@id="content"]'
) article_detail_list =
['\n'
,'\n'
,article_zhang_name,
'\n'
,'\n'
]+ article_detail_etree.xpath(
'//div[@id="content"]/text()'
)for article_detail in article_detail_list:
self.create_dir_write(text=article_detail,filename=article_name)
defarticle_list
(self,article_li)
: article_name = self.get_list_one(article_li.xpath(
'.//a/text()'))
article_url = self.get_list_one(article_li.xpath(
'.//a/@href'))
print
(article_name, article_url)
#獲取**的章節目錄
article_list_etree = self.get_etree_by_xpath(article_url,
'//div[@id="list"]'
)#獲取章節list
article_dd_list = article_list_etree.xpath(
'//div[@id="list"]/dl/dd'
)for article_dd_zhang in article_dd_list:
article_zhang_url =
''+ self.get_list_one(article_dd_zhang.xpath(
'.//a/@href'))
article_zhang_name = self.get_list_one(article_dd_zhang.xpath(
'.//a/text()'))
print
(article_zhang_name,article_zhang_url)
self.article_zhang_detail(article_zhang_name,article_zhang_url,article_name)
#獲取所有**的種類
defget_article_num
(self)
:#獲取**種類
etree_home = self.get_etree_by_xpath(self.base_url,
'//div[@id="main"]'
)for n in
range(1
,7):
article_type = self.get_list_one(etree_home.xpath(
'//div[@id="main"]/div[%s]/h2/text()'
%n))
article_li_list = etree_home.xpath(
'//div[@id="main"]/div[%s]/ul/li'
%n)print
(article_type)
self.create_dir_write(article_type=article_type)
for article_li in article_li_list:
self.article_list(article_li)
if __name__ ==
'__main__'
: base_url =
'/xiaoshuodaquan/'
b = biquge(base_url)
1 4 爬蟲 筆趣閣獲取小說例子
筆趣閣 1.模擬搜尋 2.圖書查詢 章節 3.獲取章節 內容 4.本地儲存 txt mysql def searchbook bookname input 請輸入圖書的名稱 1.轉移字元 中文在url中亂碼 bookname bookname.encode gbk 2.請求 resp request...
c 筆趣閣小說爬蟲
流年似水,回想上一次博文發表,好像已經是一年多以前,差點就忘了自己是個文件攻城獅的本質,罪過啊。最近在研究爬蟲,python用的不太習慣,還是回歸老本行c 比較好一點,個人又比較喜歡看 所以就選取筆大大做個白老鼠 默哀 寫個爬蟲玩完,迷茫啊。這個專案有幾個比較重要的點 一 正規表示式,參考 二 抓取...
初級爬蟲爬取筆趣閣小說
import requests from pyquery import pyquery as pq def get content a response requests.get a response.encoding gbk doc pq response.text text doc conten...