零基础学Python-爬虫-3、利用CSS选择器爬取整篇网络小说
生活随笔
收集整理的這篇文章主要介紹了
零基础学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 Selector3、獲取訪問路徑:爬取網站:【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选择器爬取整篇网络小说的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 零基础学Python-爬虫-2、scra
- 下一篇: 零基础学Python-爬虫-4、下载网络