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

歡迎訪問 生活随笔!

生活随笔

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

python

零基础学Python-爬虫-3、利用CSS选择器爬取整篇网络小说

發布時間:2024/8/26 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 零基础学Python-爬虫-3、利用CSS选择器爬取整篇网络小说 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本套課程正式進入Python爬蟲階段,具體章節根據實際發布決定,可點擊【python爬蟲】分類專欄進行倒序觀看:

【重點提示:請勿爬取有害他人或國家利益的內容,此課程雖可爬取互聯網任意內容,但無任何收益,只為大家學習分享。】

開發環境:【Win10】

開發工具:【Visual Studio 2019】

Python版本:【3.7】

1、重新創建一個空項目【T3】:

2、需要用的模塊【requests】【scrapy.selector】

from requests import get from scrapy.selector import Selector

3、獲取訪問路徑:爬取網站:【http://www.zongheng.com/】

就爬取第一個了:點擊開始閱讀

進入目錄頁面:

【審查元素找到對應元素位置】·【目錄地址:http://book.zongheng.com/showchapter/1079911.html】

4、CSS選擇器【scrapy.selector】

css選擇器介紹

  • 在css中選擇器是一種模式,用于選擇需要添加樣式的元素,css對html頁面中的元素實現一對一,一對多或者多對一的控制,都需要用到css選擇器,html頁面中的元素就是通過css選擇器進行控制的;

css選擇器的基本語法

  • 類選擇器:元素的class屬性,比如class="box"表示選取class為box的元素;
  • ID選擇器:元素的id屬性,比如id="box"表示選取id為box的元素;
  • 元素選擇器:直接選擇文檔元素,比如p表示選擇所有的p元素,div表示選擇所有的div元素;
  • 屬性選擇器:選擇具有某個屬性的元素,如*[title]表示選擇所有包含title屬性的元素、a[href]表示選擇所有帶有href屬性的a元素等;
  • 后代選擇器:選擇包含元素后代的元素,如li a表示選取所有li 下所有a元素;
  • 子元素選擇器:選擇作為某元素子元素的元素,如h1 > strong表示選擇父元素為h1 的所有 strong 元素;
  • 相鄰兄弟選擇器:選擇緊接在另一元素后的元素,且二者有相同父元素,如h1 + p表示選擇緊接在 h1 元素之后的所有p元素;

scrapy 中的css使用方法

以a元素來舉例說明

  • response.css('a'):返回的是selector對象;
  • response.css('a').extract():返回的是a標簽對象;
  • response.css('a::text').extract_first():返回的是第一個a標簽中文本的值;
  • response.css('a::attr(href)').extract_first():返回的是第一個a標簽中href屬性的值;
  • response.css('a[href*=image]::attr(href)').extract():返回所有a標簽中href屬性包含image的值;
  • response.css('a[href*=image] img::attr(src)').extract():返回所有a標簽下image標簽的src屬性;

5、根據目錄地址獲取所有章節頁面信息

5.1、獲取a標簽:

?5.2、獲取所有章節訪問路徑:

from requests import get from scrapy.selector import Selectorhtml=get("http://book.zongheng.com/showchapter/1079911.html").content.decode("utf-8") sel=Selector(text=html) result=sel.css("ul li a::attr(href)").extract() for x in result:print(x)

加上判斷:

from requests import get from scrapy.selector import Selectorhtml=get("http://book.zongheng.com/showchapter/1079911.html").content.decode("utf-8") sel=Selector(text=html) result=sel.css("ul li a::attr(href)").extract() for x in result:if "1079911" in x:print(x)

?

6、獲取每個章節網址返回的信息(為了防止被封,測試中每次只訪問2個)

from requests import get from scrapy.selector import Selectorhtml=get("http://book.zongheng.com/showchapter/1079911.html").content.decode("utf-8") sel=Selector(text=html) result=sel.css("ul li a::attr(href)").extract() #由于防止被封ID,故而測試的時候只訪問前兩個 count=3 for x in result:if "1079911" in x:count -= 1if count==0:breakhtml=get(x).content.decode("utf-8")sel=Selector(text=html)title=sel.css("div.title_txtbox::text").extract()[0]print(title)info=sel.css("div.content p::text").extract()for j in info:print(j)

7、存儲獲取的信息為【txt文件】·測試過程還是2次循環

由于創建文件不能創建特殊符號,所以將【:】替換成了【_】

from requests import get from scrapy.selector import Selectorhtml=get("http://book.zongheng.com/showchapter/1079911.html").content.decode("utf-8") sel=Selector(text=html) result=sel.css("ul li a::attr(href)").extract() #由于防止被封ID,故而測試的時候只訪問前兩個 count=3for x in result:if "1079911" in x:count -= 1if count==0:breakhtml=get(x).content.decode("utf-8")sel=Selector(text=html)title=sel.css("div.title_txtbox::text").extract()[0]title=title.replace(":","_")info=sel.css("div.content p::text").extract()strInfo=""for j in info:strInfo+=jfile=open(str.format("{0}{1}",title,".txt"),"w",encoding="utf-8")file.write(strInfo)file.close()

8、最終執行:(為了防止被封,故而每次訪問間隔1~3s,加上time控制)

from requests import get from scrapy.selector import Selector import time import random html=get("http://book.zongheng.com/showchapter/1079911.html").content.decode("utf-8") sel=Selector(text=html) result=sel.css("ul li a::attr(href)").extract()for x in result:if "1079911" in x:html=get(x).content.decode("utf-8")sel=Selector(text=html)title=sel.css("div.title_txtbox::text").extract()[0]title=title.replace(":","_")info=sel.css("div.content p::text").extract()strInfo=""for j in info:strInfo+=jfile=open(str.format("{0}{1}",title,".txt"),"w",encoding="utf-8")file.write(strInfo)file.close()#每次操作完休息1~3stimeStop=random.randint(1,4)time.sleep(timeStop)print("完成",title)

等了好久。。。如下如:

9、總結:

a)、CSS選擇器的用法千變萬化,只有多用才能熟能生巧。

b)、個人建議自己多找幾個網站,多試試各種各樣的CSS選擇器截取需要的信息。

歡迎【點贊】、【評論】、【關注】、【收藏】、【打賞】,為推廣知識貢獻力量。

?

總結

以上是生活随笔為你收集整理的零基础学Python-爬虫-3、利用CSS选择器爬取整篇网络小说的全部內容,希望文章能夠幫你解決所遇到的問題。

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