国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關于爬蟲解析數據的4種方式

newtrek / 1906人閱讀

摘要:大奉打更人賣報小郎君這個人仙太過正經言歸正傳從紅月開始黑山老鬼穩住別浪跳舞二解析數據是一個可以從或文件中提取數據的庫。

目錄

一、XPath解析數據

1、XPath解析數據

2、XML的樹形結構

3、使用XPath選取節點

4、課堂案例 - 爬取起點小說網

二、BeautifulSoup解析數據

1、BeautifulSoup

2、BeautifulSoup的使用

3、使用BeautifulSoup爬取淘寶網首頁

三、正則表達式

1、正則表達式

2、正則語法

3、特殊序列

4、正則處理函數

5、課堂案例(下載糗事百科小視頻)

6、課外案例

四、pyquery解析數據

1、pyquery

2、pyquery的初始化方式

3、pyquery的使用

4、課堂案例(爬取起點小說網)


一、XPath解析數據

1、XPath解析數據

  • XPath
    • 全稱:XML Path Language是一種小型的查詢語言
    • 是一門在XML文檔中查找信息的語言
  • XPath的優點
    • 可在XML中查找信息
    • 支持HTML的查找
    • 可通過元素和屬性進行導航
  • XPath需要依賴lxml庫
    • 安裝方式: pip install lxml

2、XML的樹形結構

3、使用XPath選取節點

序號

表達式

描述

1

nodename

選取此節點的所有子節點

2

/

從根節點選擇

3

//

從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置

4

.

選取當前節點

5

..

選取當前節點的父節點

6

/text()

選取當前路徑下的文本內容

7

/@xxx

提取當前路徑下標簽的屬性值

8

|可選符

可選擇若干個路徑//p|//div,在當前路徑下選取所有符合條件的p標簽和div標簽

序號

表達式

描述

1

xpath("./body/div[1]")

選取body下的第一個div節點

2

xpath("./body/div[ last() ]")

選取body下最后一個div節點

3

xpath("./body/div[ last()-1 ]")

選取body下倒數第二個div節點

4

xpath("./body/div[ position()<3 ]")

選取body下前兩個div節點

5

xpath("./body/div[ @class ]")

選取body下帶有class屬性的div節點

6

xpath("./body/div[ @class="main" ]")

選取body下class屬性為main的div節點

7

xpath("./body/div[ price>35.00 ]")

選取body下price元素大于35的div節點

4、課堂案例 - 爬取起點小說網

  • 下載谷歌瀏覽器XPath插件
  • 安裝XPath插件
  • 使用XPath
import requestsfrom lxml import etreeurl="https://www.qidian.com/rank/yuepiao"headers={"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"}# 發送請求resp=requests.get(url,headers)e=etree.HTML(resp.text)     # 類型轉換,把str類型轉換成class "lxml.etree._Element"# print(type(e))        # names=e.xpath("http://div[@class="book-mid-info"]/h4/a/text()")  # 獲取小說名稱authors=e.xpath("http://p[@class="author"]/a[1]/text()")         # 獲取小說作者# print(names)        # ["大奉打更人", "這個人仙太過正經", "從紅月開始", "穩住別浪", 。。。]# print(authors)      # ["賣報小郎君", "言歸正傳", "黑山老鬼", "跳舞", "我最白",  。。。]for name,author in zip(names,authors):    print(name, ":", author)# 大奉打更人 : 賣報小郎君# 這個人仙太過正經 : 言歸正傳# 從紅月開始 : 黑山老鬼# 穩住別浪 : 跳舞# ...    ...

二、BeautifulSoup解析數據

1、BeautifulSoup

  • BeautifulSoup
    • 是一個可以從HTML或XML文件中提取數據的Python庫。其功能簡單而強大、容錯能力強、文檔相對完善,清晰易懂
    • 非Python標準模塊,需要安裝才能使用
  • 安裝方式
    • pip install bs4
  • 測試方式
    • import bs4
  • 解析器
    • BeautifulSoup支持Python標準庫中的HTML解析器,還支持一些第三方的解析器,如果不安裝第三方解析器,則Python會使用默認瀏覽器

序號

解析器

使用方法

優點

缺點

1

標準庫

BeautifulSoup(html,"html.parser")

內置標準庫,速度適中,文檔容錯能力強

Python3.2版本前的文檔容錯能力差

2

lxml HTML

BeautifulSoup(html, "lxml")

速度快,文檔容錯能力強

安裝C語言庫

3

lxml XML

BeautifulSoup(html, "xml")

速度快,唯一支持XML

安裝C語言庫

4

html5lib

BeautifulSoup(html, "html5lib")

容錯能力最強,可生成HTML5

運行慢,擴展差

from bs4 import BeautifulSouphtml="""                     今天又是美好的一天                            

早起對自己說:我真美!

百度

"""# bs=BeautifulSoup(html, "html.parser")bs=BeautifulSoup(html, "lxml")print(bs.title) # 獲取標題 今天又是美好的一天print(bs.h1.attrs) # 獲取h1標簽的所有屬性 {"class": ["info", "bg"], "float": "left"}# 獲取單個屬性print(bs.h1.get("class")) # ["info", "bg"]print(bs.h1["class"]) # ["info", "bg"]print(bs.a["href"]) # http://www.baidu.com# 獲取文本內容print(bs.title.text) # 今天又是美好的一天print(bs.title.string) # 今天又是美好的一天# 獲取內容print("-----", bs.h2.string) # ----- 注釋的內容print("-----", bs.h2.text) # -----# string可以獲取注釋的內容,但是text不能獲取注釋內容

2、BeautifulSoup的使用

  • BeautifulSoup提取數據的常用方法

返回值類型

方法

功能

語法

舉例

Tag

find()

提取滿足要求的首個數據

bs.find(標簽,屬性)

bs.find("div", class_="books")

Tag

find_all()

提取滿足要求的所有數據

bs.find_all(標簽,屬性)

bs.find_all("div", class_="books")

  • CSS選擇題

功能

舉例

通過ID查找

bs.select("#abc")

通過classa查找

bs.select(".abc")

通過屬性查找

bs.select(a[" class="abc" "])

  • Tag對象

功能

舉例

獲取標簽

bs.title

獲取所有屬性

bs.title.attrs

獲取單個屬性的值

bs.div.get("class")

bs.div["class"]

bs.a["href"]

from bs4 import BeautifulSouphtml="""    今天又是美好的一天    
今天又是美好的一天
好好學習,天天向上 百度
人生苦短,唯有愛情"""bs=BeautifulSoup(html, "lxml")print(bs.title, type(bs.title)) # 獲取標題及其類型# 今天又是美好的一天 print(bs.find("div",class_="info"), type(bs.find("div",class_="info"))) # 獲取第一個滿足條件的標簽#
今天又是美好的一天
print(bs.find_all("div", class_="info")) # 得到的是一個標簽的列表# [
今天又是美好的一天
,
# 好好學習,天天向上# 百度#
]for item in bs.find_all("div",class_="info"): print(item, type(item))print(bs.find_all("div", attrs={"float":"right"})) # 得到屬性為"float":"right"的div標簽print("---------------CSS選擇器---------------------")print(bs.select("#gb"))print(bs.select(".info"))print(bs.select("div>span")) # [好好學習,天天向上]print(bs.select("div.info>span")) # [好好學習,天天向上]for item in bs.select("div.info>span"): print(item.text) # 好好學習,天天向上

3、使用BeautifulSoup爬取淘寶網首頁

import requestsfrom bs4 import BeautifulSoupurl="https://www.taobao.com/"headers={"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"}resp=requests.get(url,headers)# print(resp.text)        # ... ...bs=BeautifulSoup(resp.text,"lxml")a_list=bs.find_all("a")# print(len(a_list))      # 128for a in a_list:    url=a.get("href")    # print(url)    if url==None:        continue    if url.startswith("http") or url.startswith("https"):        print(url)

三、正則表達式

1、正則表達式

  • 是一個特殊的字符序列,它能幫助用戶便捷地檢查一個字符串是否與某種模式匹配
  • Python的正則模塊是re,是Python的內置模塊,不需要安裝,導入即可

2、正則語法

序號

元字符

說明

1

.

匹配任意字符(不包括/n)

2

^

匹配字符串的開頭

3

$

匹配字符的末尾

4

*

匹配前一個元字符0到多次

5

+

匹配前一個元字符1到多次

6

?

匹配前一個元字符0到1次

7

{m}

匹配前一個字符m次

8

{m,n}

匹配前一個字符m到n次

9

{m,n}?

匹配前一個字符m到n次,并且取盡可能少的情況

10

//

對特殊字符進行轉義

11

[]

一個字符的集合,可匹配其中任意一個字符

12

|

邏輯表達式“或”,比如 a|b 代表可匹配a或者b

13

(...)

被括起來的表達式作為一個元組。findall()在有組的情況下只顯示組的內容

3、特殊序列

序號

元字符

說明

1

/A

只在字符串開頭進行匹配

2

/b

匹配位于開頭或者結尾的空字符串

3

/B

匹配不位于開頭或者結尾的空字符串

4

/d

匹配任意十進制數,相當于[0-9]

5

/D

匹配任意非數字字符,相當于[^0-9]

6

/s

匹配任意空白字符,相當于[/t/n/r/f/v]

7

/S

匹配任意非空白字符,相當于[^/t/n/r/f/v]

8

/w

匹配任意數字、字母、下劃線,相當于[a-zA-Z0-9_]

9

/W

匹配任意非數字、字母、下劃線,相當于[^a-zA-Z0-9_]

10

/Z

只在字符串結尾進行匹配

11

[/u4e00-/u9fa5]

中文

4、正則處理函數

序號

正則處理函數

說明

1

re.match(pattern, string, flags=0)

嘗試從字符串的開始位置匹配一個模式,如果匹配成功,就返回一個匹配成功的對象,否則返回None

2

re.search(pattern, string, flags=0)

掃描整個字符串并返回第一次成功匹配的對象,如果匹配失敗,就返回None

3

re.findall(pattern, string, flags=0)

獲取字符串中所有匹配的字符串,并以列表的形式返回

4

re.sub(pattern, repl, string, count=0,flags=0)

用于替換字符串中的匹配項,如果沒有匹配的項則返回沒有匹配的字符串

5

re.compile(pattern[ ,flags ])

用于編譯正則表達式,生成一個正則表達式(Pattern)對象,供match()和search()函數使用

import res = "I study Python3.8 every day"print("--------match方法,從起始位置開始匹配--------")print(re.match("I", s).group())     # Iprint(re.match("/w", s).group())    # Iprint(re.match(".", s).group())     # Iprint("--------search方法,從任意位置開始匹配,匹配第一個--------")print(re.search("study", s).group())    # studyprint(re.search("s/w", s).group())      # stprint("--------findall方法,從任意位置開始匹配,匹配多個--------")print(re.findall("y", s))           # 結果為數組   ["y", "y", "y", "y"]print(re.findall("Python", s))      # ["Python"]print(re.findall("P/w+./d", s))     # ["Python3.8"]print(re.findall("P.+/d", s))     # ["Python3.8"]print("--------sub方法的使用,替換功能--------")print(re.sub("study", "like", s))     # 將study替換成like   I like Python3.8 every dayprint(re.sub("s/w+", "like", s))     #  I like Python3.8 every day

5、課堂案例(下載糗事百科小視頻)

爬取數據時,一定要記得先找F12代碼,看看和爬取的數據是否一致,若一致,則可直接提取。

import reimport requestsurl="http://www.qiushibaike.com/video/"headers={"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"}resp=requests.get(url,headers=headers)# print(resp.text)# 先隨便找一個視頻,看是否能提取到。單引號中的單引號用/轉義:/".../"# info=re.findall("", resp.text)# print(info)     # [""]info=re.findall("", resp.text)# print(info)     # 給出所有URL的相對位置的數組lst=[]for item in info:    lst.append("https:"+item)# print(lst)# 循環count=0for item in lst:    count+=1    resp=requests.get(item, headers=headers)    # 轉成二進制存儲    with open("video/"+str(count)+".mp4", "wb") as file:        file.write(resp.content)print("視頻下載完畢")

6、課外案例

用正則表達式提取51job網頁中的信息

import requestsimport refrom pandas import DataFrame # 網址url = "https://search.51job.com/list/000000,000000,0000,32,9,99,Java%25E5%25BC%2580%25E5%258F%2591,2,1.html"# 獲得網頁對象res = requests.get(url)# 設置編碼格式res.encoding = "gbk" # 職位名# 將要提取的用(.*)表示,每條數據不同的地方用.*表示position_pat = ""  position = re.findall(position_pat, res.text) # 公司名company_pat = ".*"company = re.findall(company_pat, res.text) # 工作地點place_pat = "
.*?(.*?)" # 非貪婪模式place = re.findall(place_pat, res.text, re.S) # 薪資salary_pat = "
.*?(.*?)" # 非貪婪模式salary = re.findall(salary_pat, res.text, re.S) # 將取出的信息放到數據框jobInfo = DataFrame([position, company, place, salary]).T# 設置列名jobInfo.columns = ["職位名", "公司名", "工作地點", "薪資"]print(jobInfo.head()) # 將數據保存到本地jobInfo.to_csv("51job2.csv")

四、pyquery解析數據

1、pyquery

  • pyquery庫是jQuery的Python實現,就能以jQuery的語法來操作解析HTML文檔,易用性和解析速度都很好
  • 前提條件:
    • 你對CSS選擇器與jQuery有所了解
  • 非Python標準模塊,需要安裝
    • 安裝方式
      • pip install pyquery
    • 測試方式
      • import pyquery

2、pyquery的初始化方式

  • 字符串方式

  • url方式

  • 文件

# 字符串方式from pyquery import PyQuery as pyhtml="""                     PyQuery                        

PyQuery

"""doc=py(html) # 創建PyQuery的對象,實際上就是在進行一個類型轉換,將str類型轉成PyQuery類型print(doc) # 和html一樣的內容print(type(doc)) # print(type(html)) # print(doc("title")) # PyQuery
# url方式from pyquery import PyQuerydoc=PyQuery(url="http://www.baidu.com", encoding="utf-8")print(doc)              # 獲取htmlprint(doc("title"))     # 百度一下,你就知道
# 文件from pyquery import PyQuerydoc=PyQuery(filename="a1.html")print(doc)           # 獲取htmlprint(doc("h1"))     # 

PyQuery

3、pyquery的使用

序號

提取數據

舉例

1

獲取當前節點

doc("#main")

2

獲取子節點

doc("#main").children()

3

獲取父節點

doc("#main").parent()

4

獲取兄弟節點

doc("#main").siblings()

5

獲取屬性

doc("#main").attr("href")

6

獲取內容

doc("#main").html() doc("#main").text()

from pyquery import PyQueryhtml="""                        PyQuery                            
百度

百度一下

Python學習

"""doc=PyQuery(html)# 獲取當前節點print(doc("#main")) # 獲取整個div# 獲取父節點print(doc("#main").parent()) # 獲取整個body# 獲取子節點print(doc("#main").children()) # 獲取

# # 獲取兄弟節點print(doc("#main").siblings()) # 獲取

print("----------獲取屬性------------")print(doc("a").attr("href")) # http://www.baidu.comprint("----------獲取標簽的內容------------")print(doc("#main").html()) # 獲取

,div中的所有都獲取到了print(doc("#main").text()) # 百度 百度一下, 只獲取了div中的文本

4、課堂案例(爬取起點小說網)

import requestsfrom pyquery import PyQueryurl="https://www.qidian.com/rank/yuepiao"headers={"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"}resp=requests.get(url,headers)# print(resp.text)# 初始化PyQuery對象doc=PyQuery(resp.text)      # 使用字符串初始化方式初始化PyQuery對象# a_tag=doc("h4 a")       # 獲取h4的a標簽# print(a_tag)names=[a.text for a in doc("h4 a")]# print(names)        # ["大奉打更人", "這個人仙太過正經", "從紅月開始", "穩住別浪",....]authors = doc("p.author a")       # 找

下的標簽# print(authors)authors_lst=[]for index in range(len(authors)): if index%2==0: authors_lst.append(authors[index].text)# print(authors_lst) # ["賣報小郎君", "言歸正傳", "黑山老鬼", "跳舞", "我最白", "白駒易逝", ...]for name,author in zip(names,authors_lst): print(name, ":", author)# 大奉打更人 : 賣報小郎君# 這個人仙太過正經 : 言歸正傳# 從紅月開始 : 黑山老鬼# 穩住別浪 : 跳舞# ... ...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/124512.html

相關文章

  • Python爬蟲學習路線

    摘要:以下這些項目,你拿來學習學習練練手。當你每個步驟都能做到很優秀的時候,你應該考慮如何組合這四個步驟,使你的爬蟲達到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學習不是一朝一夕的事情,建議多看看一些比較優秀的爬蟲的設計方案,比如說。 (一)如何學習Python 學習Python大致可以分為以下幾個階段: 1.剛上手的時候肯定是先過一遍Python最基本的知識,比如說:變量、數據結構、語法...

    liaoyg8023 評論0 收藏0
  • 網絡爬蟲介紹

    摘要:什么是爬蟲網絡爬蟲也叫網絡蜘蛛,是一種自動化瀏覽網絡的程序,或者說是一種網絡機器人。 什么是爬蟲 網絡爬蟲也叫網絡蜘蛛,是一種自動化瀏覽網絡的程序,或者說是一種網絡機器人。它們被廣泛用于互聯網搜索引擎或其他類似網站,以獲取或更新這些網站的內容和檢索方式。它們可以自動采集所有其能夠訪問到的頁面內容,以供搜索引擎做進一步處理(分檢整理下載的頁面),而使得用戶能更快的檢索到他們需要的信息。簡...

    sf190404 評論0 收藏0
  • Python爬蟲之Scrapy學習(基礎篇)

    摘要:下載器下載器負責獲取頁面數據并提供給引擎,而后提供給。下載器中間件下載器中間件是在引擎及下載器之間的特定鉤子,處理傳遞給引擎的。一旦頁面下載完畢,下載器生成一個該頁面的,并將其通過下載中間件返回方向發送給引擎。 作者:xiaoyu微信公眾號:Python數據科學知乎:Python數據分析師 在爬蟲的路上,學習scrapy是一個必不可少的環節。也許有好多朋友此時此刻也正在接觸并學習sc...

    pkhope 評論0 收藏0
  • 如何使用Python制作網絡爬蟲

    摘要:在近幾年迅速咋程序界掀起了不小的波瀾,而關于的第三庫也使廣大程序員趨之若鶩,今天我們就由淺入深的探討一下如何使用做一個網絡爬蟲來抓取一些頁面信息。 Python在近幾年迅速咋程序界掀起了不小的波瀾,而關于python的第三庫也使廣大程序員趨之若鶩,今天我們就由淺入深的探討一下如何使用python做一個網絡爬蟲來抓取一些頁面信息。今天我們使用的庫(包含python自身攜帶的庫和第三庫) ...

    時飛 評論0 收藏0
  • 如何使用Python制作網絡爬蟲

    摘要:在近幾年迅速咋程序界掀起了不小的波瀾,而關于的第三庫也使廣大程序員趨之若鶩,今天我們就由淺入深的探討一下如何使用做一個網絡爬蟲來抓取一些頁面信息。 Python在近幾年迅速咋程序界掀起了不小的波瀾,而關于python的第三庫也使廣大程序員趨之若鶩,今天我們就由淺入深的探討一下如何使用python做一個網絡爬蟲來抓取一些頁面信息。今天我們使用的庫(包含python自身攜帶的庫和第三庫) ...

    binaryTree 評論0 收藏0

發表評論

0條評論

newtrek

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<