主頁 > 軟體設計 > [Python從零到壹] 七.網路爬蟲之Requests爬取豆瓣電影TOP250及CSV存盤

[Python從零到壹] 七.網路爬蟲之Requests爬取豆瓣電影TOP250及CSV存盤

2021-02-27 11:04:35 軟體設計

歡迎大家來到“Python從零到壹”,在這里我將分享約200篇Python系列文章,帶大家一起去學習和玩耍,看看Python這個有趣的世界,所有文章都將結合案例、代碼和作者的經驗講解,真心想把自己近十年的編程經驗分享給大家,希望對您有所幫助,文章中不足之處也請海涵,Python系列整體框架包括基礎語法10篇、網路爬蟲30篇、可視化分析10篇、機器學習20篇、大資料分析20篇、影像識別30篇、人工智能40篇、Python安全20篇、其他技巧10篇,您的關注、點贊和轉發就是對秀璋最大的支持,知識無價人有情,希望我們都能在人生路上開心快樂、共同成長,

前一篇文章講述了 BeautifulSoup 爬取豆瓣TOP250電影,通過案例的方式讓大家熟悉Python網路爬蟲,這篇文章將詳細講解Requests庫爬取豆瓣電影TOP250,并存盤至CSV檔案,豆瓣TOP250是非常適合入門的案例,也能普及簡單的預處理知識, 希望對您有所幫助,本文參考了作者CSDN的文章和學生楊友的博客,從學生的角度實作網路爬蟲,可能對讀者更友好,參考鏈接如下:

  • https://blog.csdn.net/Eastmount
  • https://github.com/eastmountyxz/Python-zero2one
  • python爬蟲之爬取豆瓣電影top250實戰教學

文章目錄

  • 一.requests基本用法
  • 二.豆瓣網頁DOM樹分析
    • 1.網頁原始碼分析
    • 2.網頁結構分析(翻頁)
  • 三.Requests請求服務器
    • 1.匯入包
    • 2.設定瀏覽器代理
    • 3.請求服務器格式
    • 4.請求服務器代碼匯總
  • 四.xpath提取資訊
    • 1.獲取xpath節點方法
    • 2.xpath提取文本
    • 3.xpath提取鏈接
    • 4.xpath提取標簽元素
  • 五.正則運算式匹配資訊
    • 1.提取固定位置資訊
    • 2.匹配數字
  • 六.CSV檔案操作
    • 1.CSV檔案寫
    • 2.CSV檔案讀
  • 七.完整代碼
    • 1.提取本頁所有資訊
    • 2.最終代碼
  • 八.總結

最后推薦大家關注我學生CSDN的博客,十分懷戀給他們上課的情形,博客也寫得不錯,寫作風格和我也很像,哈哈~ 學生楊友問我 “他現在不編程該行了,覺得遺憾嗎?” 我的回答是 “有點遺憾,但只要是我學生的選擇,自己喜歡,我都支持;也希望他們積極的去做,把每一件事做好做深,如有需要定會幫助,一起加油!”

  • https://blog.csdn.net/ayouleyang

在這里插入圖片描述

作者新開的“娜璋AI安全之家”將專注于Python和安全技術,主要分享Web滲透、系統安全、人工智能、大資料分析、影像識別、惡意代碼檢測、CVE復現、威脅情報分析等文章,雖然作者是一名技術小白,但會保證每一篇文章都會很用心地撰寫,希望這些基礎性文章對你有所幫助,在Python和安全路上與大家一起進步,

前文賞析:

  • [Python從零到壹] 一.為什么我們要學Python及基礎語法詳解
  • [Python從零到壹] 二.語法基礎之條件陳述句、回圈陳述句和函式
  • [Python從零到壹] 三.語法基礎之檔案操作、CSV檔案讀寫及面向物件
  • [Python從零到壹] 四.網路爬蟲之入門基礎及正則運算式抓取博客案例
  • [Python從零到壹] 五.網路爬蟲之BeautifulSoup基礎語法萬字詳解
  • [Python從零到壹] 六.網路爬蟲之BeautifulSoup爬取豆瓣TOP250電影詳解
  • [Python從零到壹] 七.網路爬蟲之Requests爬取豆瓣電影TOP250及CSV存盤

一.requests基本用法

requests模塊是用Python語言撰寫的、基于urllib的第三方庫,采用Apache2 Licensed開源協議的http庫,它比urllib更方便簡潔,既可以節約大量的作業,又完全滿足http測驗需求,requests是一個很實用的Python庫,撰寫爬蟲和測驗服務器回應資料時經常會用到,使用requests可以輕而易舉的完成瀏覽器相關操作,功能包括:

  • 支持HTTP連接保持和連接池
  • 支持使用cookie保持會話
  • 支持檔案上傳
  • 支持自動回應內容的編碼
  • 支持國際化的URL和POST資料自動編碼

推薦大家從requests官方網站進行學習,這里只做簡單介紹,官方檔案地址:

  • http://docs.python-requests.org/en/master/

在這里插入圖片描述


假設讀者已經使用“pip install requests”安裝了requests模塊,下面講解該模塊的基本用法,

1.匯入requests模塊
使用陳述句如下:

import requests

2.發送請求
requests模塊可以發送http常用的兩種請求:GET請求和POST請求,其中GET請求可以采用url引數傳遞資料,它是從服務器上獲取資料;而POST請求是向服務器傳遞資料,該方法更為安全,更多用法請讀者下來學習,

下面給出使用GET請求和POST請求獲取某個網頁的方法,得到一個命名為r的Response物件,通過這個物件獲取我們所需的資訊,

import requests

r = requests.get('https://github.com/timeline.json')
r = requests.post("http://httpbin.org/post")

其他方法如下:

requests.put("http://httpbin.org/put")
requests.delete("http://httpbin.org/delete")
requests.head("http://httpbin.org/get")
requests.options("http://httpbin.org/get") 

3.傳遞引數
url通常會傳遞某種資料,這種資料采用鍵值對的引數形式置于url中,比如:

  • http://www.eastmountyxz.com/index.php?key=value

requests通過params關鍵字設定url引數,以一個字串字典來提供這些引數,假設作者想傳遞 key1=value1 和 key2=value2 到httpbin.org/get ,那么你可以使用如下代碼:

import requests

payload = {'key1':'value1', 'key2':'value2'}
r = requests.get('http://httpbin.org/get', params=payload)
print(r.url)
print(r)

輸出結果如下圖所示:

在這里插入圖片描述


4.回應內容
requests會自動解碼來自服務器的內容,并且大多數Unicode字符集都能被無縫地解碼,當請求發出后,Requests會基于HTTP頭部對回應的編碼作出有根據的推測,

使用陳述句如下:

import requests

r = requests.get('https://github.com/timeline.json')
print(r.text)

輸出結果如下圖所示:

在這里插入圖片描述

常用回應內容包括:

  • r.encoding
    獲取當前的編碼
  • r.encoding = ‘utf-8’
    設定編碼
  • r.text
    以encoding決議回傳內容,字串方式的回應體,會自動根據回應頭部的字符編碼進行解碼
  • r.content
    以位元組形式(二進制)回傳,位元組方式的回應體,會自動為你解碼gzip和deflate壓縮
  • r.headers
    以字典物件存盤服務器回應頭,但是這個字典比較特殊,字典鍵不區分大小寫,若鍵不存在則回傳None
  • r.status_code
    回應狀態碼
  • r.raw
    回傳原始回應體,也就是urllib的response物件,使用r.raw.read()
  • r.ok
    查看r.ok的布林值便可以知道是否登陸成功
  • r.json()
    Requests中內置的JSON解碼器,以json形式回傳,前提回傳的內容確保是json格式的,不然決議出錯會拋例外
  • r.raise_for_status()
    失敗請求(非200回應)拋出例外

post發送json請求:

import requests
import json
  
r = requests.post('https://api.github.com/some/endpoint',
                  data=json.dumps({'some': 'data'}))
print(r.json())

5.定制請求頭
如果你想為請求添加http頭部,只要簡單地傳遞一個字典(dict)給訊息頭headers引數即可,例如,我們給github網站指定一個訊息頭,則陳述句如下:

import requests

data = {'some': 'data'}
headers = {'content-type': 'application/json',
           'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'}
 
r = requests.post('https://api.github.com/some/endpoint',
                  data=data,
                  headers=headers)
print(r.text)

輸出結果如下圖所示:

在這里插入圖片描述


6.獲取狀態碼和Cookies

  • r.headers
    回傳字典型別,頭資訊
  • r.requests.headers
    回傳發送到服務器的頭資訊
  • r.status_code
    回應狀態碼
  • r.cookies
    回傳cookie
  • r.history
    回傳重定向資訊,可以在請求是加上 allow_redirects = false 阻止重定向

具體示例如下:

import requests

#獲取回傳狀態
r = requests.get('https://github.com/Ranxf')
print(r.status_code)
print(r.headers)
print(r.cookies)

#列印解碼后的回傳資料
r1 = requests.get(url='http://dict.baidu.com/s',
                  params={'wd': 'python'})
print(r1.url)
print(r1.text)

輸出結果如下圖所示:

在這里插入圖片描述

同時回應狀態碼可以結合例外處理,如下:

import requests

URL = 'http://ip.taobao.com/service/getIpInfo.php'  # 淘寶IP地址庫API
try:
    r = requests.get(URL, params={'ip': '8.8.8.8'}, timeout=1)
    r.raise_for_status()  # 如果回應狀態碼不是 200,就主動拋出例外
except requests.RequestException as e:
    print(e)
else:
    result = r.json()
    print(type(result), result, sep='\n')

7.超時設定
設定秒數超時,僅對于鏈接有效,

r = requests.get('url',timeout=1)

8.代理設定

proxies = {'http':'ip1','https':'ip2' }
requests.get('url',proxies=proxies)

本小節只是簡單介紹了requests模塊,推薦讀者下來結合案例和官方網站進行更深入的學習和操作,


二.豆瓣網頁DOM樹分析

1.網頁原始碼分析

豆瓣(Douban)是一個社區網站,創立于2005年3月6日,該網站以書影音起家,提供關于書籍、電影、音樂等作品的資訊,其作品描述和評論都是由用戶提供,是Web 2.0網站中具有特色的一個網站,

當我們拿到一個網頁的時候,第一步并不是去測驗它能否能使用requests簡單請求到html,而是要去選擇合適的方法進行爬取該網頁,弄明白它資料的加載方式,才可以讓我們的事半功倍,選擇一個好的請求方法也可以提升我們爬蟲程式的效率,

本文主要介紹爬取豆瓣電影排名前250名的電影資訊,地址為:

  • https://movie.douban.com/top250?format=text

右鍵審查元素顯示HTML源代碼,如下圖所示,

在這里插入圖片描述

對應的HTML部分代碼如下:

<li><div class="item">
 <div class="pic">
   <em class="">1</em>
   <a href="https://movie.douban.com/subject/1292052/"> 
    <img alt="肖申克的救贖"src="https://img3.doubanio.com/.../p480747492.webp" >
   </a>
 </div>
 <div class="info">...</div>
</div></li>

2.網頁結構分析(翻頁)

網站翻頁是網路爬蟲中至關重要的一環,我們進入豆瓣電影 Top 250,查看它的網頁結構,點擊 “下一頁” ,查看它的URL鏈接,會發現下面的規律:

1頁URL:https://movie.douban.com/top250?start=0&filter=2頁URL:https://movie.douban.com/top250?start=25&filter=3頁URL:https://movie.douban.com/top250?start=50&filter= 
...10頁URL:https://movie.douban.com/top250?start=225&filter=

它是存在一定規律的,top250?start=25表示獲取第2頁(序號為26到50號)的電影資訊;top250?start=50表示獲取第3頁(序號為51到75號)的電影資訊,依次類推,

方法一:
我們結合數學公式寫一個回圈獲取完整的250部電影資訊,核心代碼如下:

i = 0  
while i<10:  
    num = i*25  #每次顯示25部 URL序號按25增加  
    url = 'https://movie.douban.com/top250?start=' + str(num) + '&filter='  
    crawl(url)  #爬蟲電影資訊
    i = i + 1

方法二:
需要寫一個for回圈,生成從0到225的數字即可,從上面的鏈接可以看出來,它的間隔為25,for page in range(0, 226, 25) 必須要取超過停止資料225,因為255不包含在其中,25是它的公差,程式表示為:

在這里插入圖片描述

接下來使用python的requests庫去代替瀏覽器請求網頁的服務器,回傳HTML檔案,提取并保存資訊,再生成下一頁的鏈接,繼續上面請求服務器的操作爬取資訊,


三.Requests請求服務器

在向服務器發出請求時,我們先選擇第一個鏈接來進行測驗,完成本頁所有內容的獲取,然后再獲取所有頁面的資訊,

1.匯入包

  • 如果沒有安轉 requests , 可以使用pip直接安轉
  • 步驟:win+r運行——>cmd——>pip install requests

2.設定瀏覽器代理

  • 網頁點擊右鍵,打開檢查,選擇Network,All
  • 重繪網頁,選擇第一個檔案,雙擊,選擇headers

在這里插入圖片描述

設定的瀏覽器代理必須為字典型,如:

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
     AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}

3.請求服務器格式

請求源代碼向服務器發出請求,200代表成功,如果在后面加上 .text 表示輸出文本內容,

  • url是用一個鏈接
  • headers是用來做瀏覽器代理的內容
requests.get(url = url, headers = headers)

4.請求服務器代碼匯總

這里以第一頁內容為例,核心代碼如下所示:

import requests

#設定瀏覽器代理,它是一個字典
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
        AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}
url = 'https://movie.douban.com/top250?start=0&filter='

#向服務器發出請求
r = requests.get(url = url, headers = headers)
print(r.text)

輸出結果如下圖所示:

在這里插入圖片描述


四.xpath提取資訊

1.獲取xpath節點方法

xpath是按照HTML標簽的方式進行定位的,谷歌瀏覽器自帶有xpath,可以直接復制過來使用,簡單方便,運行速度快,輸出結果為:

  • //*[@id=“content”]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]

在這里插入圖片描述

我們使用xpath時,也必須先對網頁進行 lxml 庫中的 etree 決議,把它變為特有的樹狀形式,才能通過它進行節點定位,

from lxml import etree            #匯入決議庫
html_etree = etree.HTML(reponse)  #樹狀結構決議

2.xpath提取文本

當我們提取標簽內的文本時,需要在復制到的xpath后面加上 /text() ,告訴它我們需要提取的內容是一個標簽呈現的資料,如《肖申克的救贖》,

<span class="title">肖申克的救贖</span>

結合xpath所提取的文字代碼為:

# coding:utf-8
# By:Eastmount 2021-02-25
import requests
from lxml import etree

#設定瀏覽器代理,它是一個字典
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
        AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}
url = 'https://movie.douban.com/top250?start=0&filter='

#向服務器發出請求
r = requests.get(url = url, headers = headers).text

#決議DOM樹結構
html_etree = etree.HTML(r)
name = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]/text()')
print ("這是陣列形式:",name)
print ("這是字串形式:",name[0])

輸出結果如下所示:

這是陣列形式: ['肖申克的救贖']
這是字串形式: 肖申克的救贖

3.xpath提取鏈接

每一個鏈接都是在標簽內的,通常放在 src=" " 或者 href=" " 之中,如

在這里插入圖片描述

xpath為:

//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a

提取鏈接時,需要在復制到的xpath后面加上 /@href , 指定提取鏈接,

movie_url = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/@href')
print ("這是陣列形式:",movie_url)
print ("這是字串形式:",movie_url[0])

輸出結果如下所示:

這是陣列形式: ['https://movie.douban.com/subject/1292052/']
這是字串形式: https://movie.douban.com/subject/1292052/

4.xpath提取標簽元素

這個網頁中電影的星級沒有用幾顆星的文本表示,而是標簽表示的,如:

在這里插入圖片描述

所以只需要取出 class=" " 中的內容就可以得到星級了,復制它的xpath,和提取鏈接的方法一樣,在后面加上 /@class 即可,

rating = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[2]/div/span[1]/@class')
print ("這是陣列形式:",rating)
print ("這是字串形式:",rating[0])

輸出結果如下所示:

這是陣列形式: ['rating5-t']
這是字串形式: rating5-t

五.正則運算式匹配資訊

前面第四篇文章我們詳細介紹了正則運算式的內容,它常常會與網路爬蟲和資料預處理結合起來,簡化我們的作業,這里需要把結果中的資訊匹配出來,可以使用正在運算式,單獨提取自己需要的資訊,如星級,它都是以 rating5-t 方式呈現的,但是我們只需要它數字5位置的部分,所以需要進行二次提取,

1.提取固定位置資訊

正則運算式中可以使用 .*? 來進行匹配資訊,沒有加括號時可以去掉不一樣的資訊,不需要提取出來,加括號 (.*?) 可以提取出括號內的內容,如:

import re
test = "rating5-t"
text = re.findall('rating(.*?)-t', test)
print (text)

輸出結果為:

['5']

這里再舉一個簡單的例子:

在這里插入圖片描述

2.匹配數字

比如評價數,我們xpath提取到的資料格式為: 1056830人評價 ,保存的時候只需要數字即可,現在把數字提取出來:

import re 
data = "1059232人評價"
num = re.sub(r'\D', "", data)
print("這里的數字是:", num)

輸出結果為:

這里的數字是: 1059232

六.CSV檔案操作

我們在使用Python進行網路爬蟲或資料分析時,通常會遇到CSV檔案,類似于Excel表格,第三篇文章我們詳細介紹了CSV檔案的操作,保存內容與把大象放進冰箱是一樣的,分別為打開冰箱,把大象裝進去,關閉冰箱,這里我們進行簡單說明,

1.CSV檔案寫

基本流程如下:

  • 匯入CSV模塊
  • 創建一個CSV檔案物件
  • 寫入CSV檔案
  • 關閉檔案
# -*- coding: utf-8 -*-
import csv

c = open("test-01.csv", "w", encoding="utf8", newline='')  #寫檔案
writer = csv.writer(c)
writer.writerow(['序號','姓名','年齡'])
 
tlist = []
tlist.append("1")
tlist.append("小明")
tlist.append("10")
writer.writerow(tlist)
print(tlist,type(tlist))
 
del tlist[:]  #清空
tlist.append("2")
tlist.append("小紅")
tlist.append("9")
writer.writerow(tlist)
print(tlist,type(tlist))
 
c.close()

輸出結果如下圖所示:

在這里插入圖片描述


2.CSV檔案讀

基本流程如下:

  • 匯入CSV模塊
  • 創建一個CSV檔案物件
  • 讀取CSV檔案
  • 關閉檔案
# -*- coding: utf-8 -*-
import csv
c = open("test-01.csv", "r", encoding="utf8")  #讀檔案
reader = csv.reader(c)
for line in reader:
    print(line[0],line[1],line[2])
c.close()

輸出結果如下圖所示:

在這里插入圖片描述

在檔案操作中編碼問題是最讓人頭疼的,尤其Python2的時候,但只需要環境編碼一致,注意相關轉換也能有效解決,而Python3檔案讀寫操作寫清楚encoding編碼方式就能正常顯示,


七.完整代碼

1.提取本頁所有資訊

通過前面的 xpath 只能提取到一條資訊,如果我們要提取所有的資訊,寫一個 for 回圈把它遍歷出來即可,先復制幾個電影名字的 xpath,如前三個的:

在這里插入圖片描述

li 標簽前的作為父級,后面的為子集,./ 代替父級的位置,改寫為:

li = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li')
for item in li:
    name = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]
    print (name)

此時的代碼如下所示:

# coding:utf-8
# By:Eastmount & ayouleyang 2021-02-25
import requests
from lxml import etree

#設定瀏覽器代理,它是一個字典
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
        AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}
url = 'https://movie.douban.com/top250?start=0&filter='

#向服務器發出請求
r = requests.get(url = url, headers = headers).text

#決議DOM樹結構
html_etree = etree.HTML(r)
name = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]/text()')
print ("這是陣列形式:",name)
print ("這是字串形式:",name[0])

#提取鏈接
movie_url = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/@href')
print ("這是陣列形式:",movie_url)
print ("這是字串形式:",movie_url[0])

#提取打分
rating = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[2]/div/span[1]/@class')
print ("這是陣列形式:",rating)
print ("這是字串形式:",rating[0])

#提取本頁所有電影名
li = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li')
for item in li:
    name = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]
    print (name)

輸出結果如下圖所示:

在這里插入圖片描述


2.最終代碼

最終代碼如下所示:

# coding:utf-8
# By:Eastmount & ayouleyang 2021-02-25
import requests
from lxml import etree
import csv, re

#設定瀏覽器代理,它是一個字典
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
        AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}

#創建檔案夾并打開
fp = open("./豆瓣top250.csv", 'a', newline='', encoding = 'utf-8-sig')
writer = csv.writer(fp) #寫入
writer.writerow(('排名', '名稱', '鏈接', '星級', '評分', '評價人數'))

#回圈遍歷TOP250的URL
for page in range(0, 226, 25):  #226
    print ("正在獲取第%s頁"%page)
    url = 'https://movie.douban.com/top250?start=%s&filter='%page
    
    #請求源代碼
    reponse = requests.get(url = url, headers = headers).text
    
    #決議DOM樹結構
    html_etree = etree.HTML(reponse)
    
    #定位節點 注意迭代xpath應用
    li = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li')
    for item in li:
        #排名
        rank = item.xpath('./div/div[1]/em/text()')[0]
        #電影名稱
        name = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]
        #鏈接
        dy_url = item.xpath('./div/div[2]/div[1]/a/@href')[0]
        
        #評分 正則運算式提取
        rating = item.xpath('./div/div[2]/div[2]/div/span[1]/@class')[0]
        rating = re.findall('rating(.*?)-t', rating)[0]
        if len(rating) == 2:
            star = int(rating) / 10  #int()轉化為數字
        else:
            star = rating
            
        #評價人數
        rating_num = item.xpath('./div/div[2]/div[2]/div/span[2]/text()')[0]
        content = item.xpath('./div/div[2]/div[2]/div/span[4]/text()')[0]
        content = re.sub(r'\D', "", content)
        #print (rank, name, dy_url, star, rating_num, content)

        #寫入內容
        writer.writerow((rank, name, dy_url, star, rating_num, content))
fp.close()

運行結果如下圖所示:

在這里插入圖片描述

最終保存的檔案如下圖所示:

在這里插入圖片描述

在這里插入圖片描述


八.總結

在學習網路爬蟲之前,讀者首先要掌握分析網頁節點、審查元素定位標簽,甚至是翻頁跳轉、URL分析等知識,然后才是通過Python、Java或C#實作爬蟲的代碼,本文作者結合自己多年的網路爬蟲開發經驗,深入講解了Requests技術網頁分析并爬取了豆瓣電影資訊,讀者可以借用本章的分析方法,結合Requests庫爬取所需的網頁資訊,并學會分析網頁跳轉,盡可能爬取完整的資料集,

該系列所有代碼下載地址:

  • https://github.com/eastmountyxz/Python-zero2one

2020年在github的綠瓷磚終于貼完了第一年提交2100余次,獲得1500多+stars,開源93個倉庫,300個粉絲,挺開心的,希望自己能堅持在github打卡五年,督促自己不斷前行,簡單總結下,最滿意的資源是YQ爆發時,去年2月分享的輿情分析和情感分析,用這系列有溫度的代碼為武漢加油;最高贊的是Python影像識別系列,也獲得了第一位來自國外開發者的貢獻補充;最花時間的是Wannacry逆向系列,花了我兩月逆向分析,幾乎成為了全網最詳細的該蠕蟲分析;還有AI系列、知識圖譜實戰、CVE復現、APT報告等等,當然也存在很多不足之處,希望來年分享更高質量的資源,也希望能將安全和AI頂會論文系列總結進來,真誠的希望它們能幫助到大家,感恩有你,一起加油~

在這里插入圖片描述

最后,真誠地感謝您關注“娜璋之家”公眾號,感謝CSDN這么多年的陪伴,會一直堅持分享,希望我的文章能陪伴你成長,也希望在技術路上不斷前行,文章如果對你有幫助、有感悟,就是對我最好的回報,且看且珍惜!2020年8月18日建立的公眾號,再次感謝您的關注,也請幫忙宣傳下“娜璋之家”,哈哈~初來乍到,還請多多指教,

在這里插入圖片描述

(By:娜璋之家 Eastmount 2021-02-25 夜于貴陽 https://blog.csdn.net/Eastmount )


參考文獻如下:

  • 作者書籍《Python網路資料爬取及分析從入門到精通》
  • python爬蟲之爬取豆瓣電影top250實戰教學 - 楊友
  • 作者博客:https://blog.csdn.net/Eastmount
  • 北京豆網科技有限公司——豆瓣
  • https://2.python-requests.org/en/master/
  • Python—requests模塊詳解 - lanyinhao

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/264199.html

標籤:其他

上一篇:一個app直播間的彈幕獲取術

下一篇:面經刷了很多,但是突然發現簡歷不會寫?我這里有18種簡歷模板,來看看?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more