爬蟲筆趣閣例子

2021-09-28 15:00:20 字數 3806 閱讀 6646

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...