【數(shù)據(jù)分析】【數(shù)據(jù)獲取】【Python爬蟲】快速入門+實例+代碼+GIF實操

一:爬蟲認知

爬蟲名稱由來于蜘蛛結網(wǎng),蜘蛛在一個一個的蛛網(wǎng)節(jié)點中等待獵物的到來。而我們的爬蟲也是從網(wǎng)頁頁面的HTML資源中取出我們要的節(jié)點資源。二者過程相似,因此爬蟲稱之為Spider。

1.1 爬蟲的前置知識

知道雙標簽的HTML結構,知道網(wǎng)頁或者抓包工具如何查看資源,了解css和js更佳。如果零基礎也沒有關系,接下來的案例講解中會穿插到有相關的知識。

1.2 準備工具

安裝有python3,以及requests、lxml、beautifulsoup4、selenium、scripy三方包。

二:爬蟲基礎

2.1 基本套路

  • 基本流程
    • 目標數(shù)據(jù)是什么,你要爬取什么數(shù)據(jù)?
    • 來源地址在哪,你從什么地方爬取數(shù)據(jù)?
    • 你要的數(shù)據(jù)放在那些HTML結構里面?
    • 你采用那種方式進行數(shù)據(jù)提取?xpath、css選擇、beautifulsoup提取、re正則提???
  • 基本手段
    • 破解請求限制
      • 請求頭設置,模擬設置請求頭
      • 控制請求頻率(根據(jù)實際情景),控制爬蟲休眠(防止DNS攻擊目標網(wǎng)站)
      • IP代理(防止反爬手段封你的IP)
      • 簽名/加密參數(shù)從html/cookie/js分析(網(wǎng)站要求驗證信息)
    • 破解登錄授權
      • 請求帶上用戶cookie信息
    • 破解驗證碼
      • 簡單的驗證碼可以使用識圖讀驗證碼第三方庫(自己訓練驗證碼算法或者付費實現(xiàn))
  • 解析數(shù)據(jù)
    • xpath、css選擇、beautifulsoup提取、re正則提???

2.2 一個簡單爬蟲

import requests # 導入三方包 requests

url = 'http://www.baidu.com' # 給出訪問地址

response = requests.get(url=url) # 利用requests包進行請求訪問
print(response.status_code) # 返回請求狀態(tài)碼,200代表訪問成功,可以直接答應response查看一下整體效果

查看狀態(tài)碼

查看所有的信息

百度網(wǎng)頁對比

對比之后我們發(fā)現(xiàn),兩者的網(wǎng)頁并不一樣,莫著急,上面的簡單爬蟲只是想要說明在python中爬蟲代碼有多么容易,短短三行代碼就可以構建一個爬蟲。真正運用的爬蟲可以參考上訴構造方式添加參數(shù)構建。

2.3 一些簡單參數(shù)的添加

2.3.1 爬蟲響應信息

代碼 含義
response.json() 獲取響應內(nèi)容(以json字符串)
response.text 獲取響應內(nèi)容 (以字符串)
response.content 獲取響應內(nèi)容(以字節(jié)的方式)
response.headers 獲取響應頭內(nèi)容
response.url 獲取訪問地址
response.encoding 獲取網(wǎng)頁編碼
response.request.headers 請求頭內(nèi)容
response.cookie 獲取cookie

2.3.2 構造header

現(xiàn)如今網(wǎng)站的反爬手段非常多,除了一部分網(wǎng)站不做反爬措施以外,大部分都做了反爬。因此,我們就需要為我們的爬蟲來添加各種參數(shù),使得網(wǎng)站認為這是一個用戶在瀏覽內(nèi)容,而不是一個爬蟲在進行內(nèi)容爬取。當然,現(xiàn)如今隨著法律的健全,爬蟲也需要注意不要去爬取違法資源??梢詤⒖季W(wǎng)站的/robots.txt,看有哪些內(nèi)容是不允許爬取的。這個還是要看一下的,否則牢獄之災也不是說著玩的。

網(wǎng)頁地址/robots.txt

bilibili的robots.txt

好了,那么我們接下來構造我們的第一個參數(shù),header。

我們?yōu)槭裁匆O置header這個參數(shù)呢?header是我們的瀏覽器在瀏覽時提交給網(wǎng)站服務器關于自身瀏覽器的信息,而我們使用python作為爬蟲的時候,給出的header是python,而這樣會導致網(wǎng)站服務器直接認出我們是一個爬蟲。直接不返回數(shù)據(jù),或者返回錯誤數(shù)據(jù)。因此,header是我們爬蟲要設置的第一個參數(shù)。

header的數(shù)據(jù)可以通過在瀏覽器查看自己的header。我們一般添加User-Agent信息。


瀏覽器查看headers

另外,也可以通過三方包fake-useragent進行實例化User-Agent,不過國內(nèi)可能無法得到fake-useragent的實例化對象,可以在網(wǎng)上找找?;蛘邊⒖家韵挛恼拢?a target="_blank">https://blog.csdn.net/jiduochou963/article/details/90383692

fake-useragent的使用

ok,我們設置了第一個參數(shù)headers之后,可以嘗試著爬取一小部分的信息了,我們使用如下網(wǎng)站:開心一刻笑話:http://xiaodiaodaya.cn/article/view.aspx?id=7436

import requests
from fake_useragent import UserAgent

url = 'http://xiaodiaodaya.cn/article/view.aspx?id=7436' # 請求網(wǎng)址
headers = {'User-Agent': UserAgent().random} # 設置header參數(shù)

response = requests.get(url, headers=headers) # 發(fā)送請求并將接收到的數(shù)據(jù)作為response
response.encoding = 'utf-8' # 設置返回數(shù)據(jù)的編碼為utf-8可以查看中文
print(response.text) # 打印輸出text內(nèi)容
笑話爬取
import requests
from fake_useragent import UserAgent

url = 'http://xiaohua.zol.com.cn'
headers = {'User-Agent': UserAgent().random}

response = requests.get(url, headers=headers)
response.encoding = 'gbk'
print(response.text)
中關村笑話爬取

2.3.3 設置爬取時間間隔

當我們使用爬蟲爬取網(wǎng)站時,如果不設置爬蟲間隔時間,可能會導致短時間內(nèi)大量訪問網(wǎng)站,導致網(wǎng)站服務器崩潰,或者被網(wǎng)站服務器檢測到異常直接封掉IP。因此,為了減少爬取的次數(shù),我們可以設置一次爬蟲的間隔時間,可以使用time這個自帶的包,設置sleep()休眠時間。如此,就可以杜絕短時的大量訪問情況了。

import requests
from fake_useragent import UserAgent
from time import sleep

url = 'http://xiaohua.zol.com.cn'
headers = {'User-Agent': UserAgent().random}

response = requests.get(url, headers=headers)
response.encoding = 'gbk'
print(response.text)
sleep(2)

一般而言,需要時間間隔的爬蟲,都有較大數(shù)目的循環(huán)爬取,而我們上方的代碼實際上只爬取了一次,因此可以不用時間間隔。我目前也沒有什么要大量爬取的數(shù)據(jù),所以就寫了一下如何進行設置,而不是完全的演示。

2.3.4 代理IP

我們注意到了構建一個健康的爬蟲,并且也設置了header和時間間隔。然而,有可能網(wǎng)站的服務器反爬算法還是監(jiān)測到了我們的爬蟲程序。雖然一般來說不會出現(xiàn)封IP的現(xiàn)象,但是不可否認的是可能會出現(xiàn)封IP的情況。所以,我們可以通過設置代理IP的方式進行訪問。

import requests
from fake_useragent import UserAgent

url = 'http://httpbin.org/get'
headers = {'User-Agent': UserAgent().random}
proxies = {
    "http": "http://140.246.30.24:3828"
}

response = requests.get(url, headers=headers, proxies=proxies, stream=True)
response.encoding = 'utf-8'
print(response.raw._connection.sock.getpeername()[0])
ip代理

如果是你購買的的ip的話,輸入ip的時候就需要輸入你的用戶名和密碼。另外,代理為百度而來,所以可能已失效。

import requests
from fake_useragent import UserAgent

url = 'http://httpbin.org/get'
headers = {'User-Agent': UserAgent().random}
proxies = {
    "http": "http://user:password@140.246.30.24:3828/"
}

response = requests.get(url, headers=headers, proxies=proxies, stream=True)
response.encoding = 'utf-8'
print(response.raw._connection.sock.getpeername()[0])

2.3.5 輸入cookies

爬蟲不得不說的一種情況就是現(xiàn)今大多數(shù)網(wǎng)站都加入了驗證機制。如果你只是短時間要用一下的話,完全可以自己先登錄,登錄之后再從瀏覽器拿到自己的cookies信息,將cookies信息傳入到爬蟲程序中,如此就可以實現(xiàn)短時間的內(nèi)容爬取。
例如,我們要爬取貓眼電影,現(xiàn)今貓眼電影使用加入了美團驗證,爬蟲一旦遇上驗證的話,就會直接歇菜。除非你進行了相應的設置,因此我們使用cookies的方式進行短時爬取。

這一次的運氣很好啊,我們沒有碰上驗證中心,不過總是有可能翻車的嘛,所以我們還是加上cookies吧。


不傳入cookies

加入cookies

加入cookies除了用于驗證外,也可用于登錄用戶的驗證。因此,cookies的處理也是較為重要的。

2.3.6 動態(tài)數(shù)據(jù)

我們目前使用requests獲得的數(shù)據(jù)都是靜態(tài)網(wǎng)頁數(shù)據(jù),也就是說數(shù)據(jù)都在HTML結構里面。然而,有可能我們使用爬蟲爬取的數(shù)據(jù)是動態(tài)數(shù)據(jù),也就是JavaScript渲染的數(shù)據(jù)。因此,我們可以使用selenium進行動態(tài)渲染后,再進行數(shù)據(jù)的爬取。這一部分放在后面介紹,現(xiàn)在先有個概念就行了。

3. 爬蟲信息提取

我們見面介紹的requests庫的get方法和各種參數(shù)的添加,都只拿到了整個網(wǎng)頁信息。如同我們前面的Gif動態(tài)圖中展示的一樣,我們每次爬到的數(shù)據(jù)都是整個HTML頁面的數(shù)據(jù),這樣的數(shù)據(jù)如果不經(jīng)過處理雖然人眼依舊可以找到我們想要的數(shù)據(jù)。但是,當數(shù)據(jù)量很大之后,這樣的效率實在是太低了,為了提高效率。我們介紹以下幾種數(shù)據(jù)提取方法。

3.1 xpath選擇器

命令 作用
/ 從根節(jié)點開始選取數(shù)據(jù)
// 從任意滿足條件的節(jié)點選取數(shù)據(jù)
. 當前節(jié)點
.. 上一個節(jié)點
/[@屬性='值'] 根據(jù)屬性值選取數(shù)據(jù)
/@屬性 獲得某個屬性的值
/text 獲得文本內(nèi)容
/標簽[i] 獲得該標簽的第i個的內(nèi)容
/標簽[last()-i] 獲得該標簽的倒數(shù)第i+1個的內(nèi)容
/* 獲得某個路徑下所有的標簽
/@* 獲得某個標簽下的所有屬性內(nèi)容

比如我們要獲得這個笑話下面的內(nèi)容:http://xiaohua.zol.com.cn/detail60/59364.html

import requests
from fake_useragent import UserAgent
from lxml import etree  

url = 'http://xiaohua.zol.com.cn/detail60/59364.html'
headers = {
    'User-Agent': UserAgent().random
}

response = requests.get(url, headers=headers)
response.encoding = 'gbk'

# 實例化HTML對象
html = etree.HTML(response.text)
# 取出笑話數(shù)據(jù)
jokes = html.xpath("http://div[@class='article-text']/p")

# 遍歷所有的笑話變量,取出每一個的text屬性
for joke in jokes:
    print(joke.text)
爬取笑話信息

3.2 css選擇器

命令 作用
.值1 class屬性的值為值1
#值1 id屬性的值為值1
標簽1,標簽2 選擇標簽1和標簽2
標簽1 標簽2 標簽1 下面的 標簽2
標簽1 > 標簽2 標簽1 下面的 標簽2
[屬性1] 獲得所有具有屬性1的標簽
[屬性1='某個值'] 獲得所有屬性1的值為某個值的標簽
標簽:nth-child[i] 標簽下的第幾個節(jié)點(子節(jié)點)
標簽:nth-last-child[i] 標簽下的倒數(shù)第幾個節(jié)點(子節(jié)點)
標簽:last-child 標簽的最后一個子節(jié)點
標簽.get_attribute('屬性名') 獲得某個標簽下的屬性名這個屬性的值
  • 依舊是爬取同一個笑話的內(nèi)容,首先安裝pyquery三方包。
    from pyquery import PyQuery as pq
    from fake_useragent import UserAgent
    
    url = 'http://xiaohua.zol.com.cn/detail60/59364.html'
    headers = {
        'User-Agent':UserAgent().random
    }
    
    datas = pq(url=url,headers=headers)
    jokes = datas('div.article-text p')
    
    for joke in jokes:
        print(joke.text)
    
css選擇器

3.3 beautifulsoup選擇器

解析器 使用方法 優(yōu)勢 劣勢
Python標準庫 BeautifulSoup(markup, “html.parser”) 1. Python的內(nèi)置標準庫 2. 執(zhí)行速度適中 3.文檔容錯能力強 Python 2.7.3 or 3.2.2)前 的版本中文檔容錯能力差
lxml HTML 解析器 BeautifulSoup(markup, “l(fā)xml”) 1. 速度快 2.文檔容錯能力強 需要安裝C語言庫
lxml XML 解析器 BeautifulSoup(markup, [“l(fā)xml”, “xml”])

BeautifulSoup(markup, “xml”)
1. 速度快 2.唯一支持XML的解析器 需要安裝C語言庫
html5lib BeautifulSoup(markup, “html5lib”) 1. 最好的容錯性 2.以瀏覽器的方式解析文檔 3.生成HTML5格式的文檔 4.速度慢 不依賴外部擴展
對象 命令 作用
tag .標簽 beautifulsoup 文檔樹的標簽,可類比HTML中的雙標簽進行理解。輸出標簽及內(nèi)部的值。
NavigableString .string 獲取字符串內(nèi)容
.text 獲取文本內(nèi)容
搜索對象 find_all('標簽名稱') 找到所有的叫做標簽名稱的標簽的內(nèi)容
find('標簽名稱') 找到第一個符合條件的標簽及內(nèi)容
css選擇器 .select() 對應的css語法即可,參考上一小部分內(nèi)容。
  • 依舊是獲取同一個笑話的內(nèi)容,需要先安裝beautifulsoup4這個三方包
    import requests
    from bs4 import BeautifulSoup
    from fake_useragent import UserAgent
    
    url = 'http://xiaohua.zol.com.cn/detail60/59364.html'
    headers = {
        'User-Agent': UserAgent().random
    }
    
    datas = requests.get(url, headers=headers)
    html = datas.text
    
    # 實例化soup對象
    soup = BeautifulSoup(html, 'lxml')
    jokes = soup.find_all('div', attrs={'class':'article-text'})
    for joke in jokes:
        print(joke.text)
    
beautifulsoup選取數(shù)據(jù)

3.4 Python正則表達式

命令 說明
^ 匹配字符串的開頭
$ 匹配字符串的末尾
. 匹配任意字符,除了換行符,當re.DOTALL標記被指定時,則可以匹配包括換行符的任意字符
[...] 用來表示一組字符,單獨列出:[amk] 匹配 'a','m'或'k'
[^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符
* 匹配0個或多個的表達式
+ 匹配1個或多個的表達式
? 匹配0個或1個由前面的正則表達式定義的片段,非貪婪方式
{ n} 前面的表達式出現(xiàn)n次
{ n,} 前面表達式至少出現(xiàn)n次
re{ n, m} 前面的正則表達式出現(xiàn)n到m之間次
a 匹配為a字符
() 括號內(nèi)的表達式,表示一個組
\w 匹配字母數(shù)字及下劃線
\W 匹配非字母數(shù)字及下劃線
\s 匹配任意空白字符,等價于 [\t\n\r\f].
\S 匹配任意非空字符
\d 匹配任意數(shù)字,等價于 [0-9]
\D 匹配任意非數(shù)字
\A 匹配字符串開始
\Z 匹配字符串結束,如果是存在換行,只匹配到換行前的結束字符串。c
\z 匹配字符串結束
\G 匹配最后匹配完成的位置
\b 匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'
\B 匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'
\n, \t, 等. 匹配一個換行符。匹配一個制表符。等
\1...\9 匹配第n個分組的內(nèi)容
\10 匹配第n個分組的內(nèi)容,如果它經(jīng)匹配。否則指的是八進制字符碼的表達式
[\u4e00-\u9fa5] 中文
import requests
import re
from fake_useragent import UserAgent

url = 'http://xiaohua.zol.com.cn/detail60/59364.html'
headers = {
   'User-Agent':UserAgent().random
}

datas = requests.get(url,headers=headers).text

jokes = re.findall(r'<p>\s*(.+)\s*</p>',datas)
for joke in jokes:
    print(joke)
正則提取笑話

4. 實例

經(jīng)過第2部分的參數(shù)設置,第3部分的信息提取,現(xiàn)在我們已經(jīng)能夠?qū)㈧o態(tài)頁面想要爬取的數(shù)據(jù)全部爬取出來了。所以,我們現(xiàn)在來做一個案例吧。

案例:爬取嗶哩嗶哩的每日排行榜

還記得我們前面說過的爬蟲套路么?現(xiàn)在可以ctrl+Home回到首頁看看有哪些套路哦,我們按照這個套路來爬去我們的嗶哩嗶哩視頻網(wǎng)站的每日排行榜吧。

  • 首先我們要找到嗶哩嗶哩的每日排行版的url界面,拿到url。
    https://www.bilibili.com/ranking](https://www.bilibili.com/ranking
    
  • 提取那些數(shù)據(jù)
    F12可以查看網(wǎng)頁HTML代碼哈。所以,我們對頁面分析之后確定我們要拿'標題', '排名', '得分', '播放量', '熱度', 'up', 'upid', '視頻地址'
  • 如何提取
    我們可以使用上述介紹到的多種方法進行數(shù)據(jù)提取哦,我這邊就選用xpath和beautifulsoup兩種方式進行講解。
  • 接下來就是編碼了。
    • beautifulsoup提取信息
      import requests
      from bs4 import BeautifulSoup
      import csv
      from datetime import datetime
      
      url = 'https://www.bilibili.com/ranking'
      
      # 發(fā)起網(wǎng)絡請求
      response = requests.get(url)
      html = response.text
      soup = BeautifulSoup(html, 'html.parser')
      items = soup.find_all('li', {"class": "rank-item"})
      contents = []
      
      for item in items:
          title = item.find('a', {"class": "title"}).text  # 視頻標題
          video_url = item.find_all('a')[1].get('href')  # av號鏈接
          score = item.find('div', {"class": "pts"}).find('div').text  # 綜合得分
          rank = item.find('div', {"class": "num"}).text  # 排名
          up = item.find_all('span', {"class": "data-box"})[2].text  # up
          up_id = item.find_all('a')[2].get('href')  # upid
          up_url = 'https:' + up_id
          plays = item.find_all('span', {"class": "data-box"})[0].text  # 播放量
          hots = item.find_all('span', {"class": "data-box"})[1].text  # 熱度
          content = [title, rank, score, plays, hots, up, up_url, video_url]
          contents.append(content)
      
      now = datetime.now().strftime('%Y%m%d_%H%M%S')
      file_name = f'{now}top.csv'
      # 保存為csv文件
      with open(file_name, 'w+', encoding='utf-16', newline='') as f:
          f_csv = csv.writer(f)
          f_csv.writerow(['標題', '排名', '得分', '播放量', '熱度', 'up', 'upid', '視頻地址'])
          f_csv.writerows(contents)
      
beautifulsoup提取嗶哩嗶哩日排行
  • xpath提取信息
    import requests
    from lxml import etree
    import csv
    from datetime import datetime
    
    url = 'https://www.bilibili.com/ranking'
    
    # 發(fā)起網(wǎng)絡請求
    response = requests.get(url)
    html = response.text
    datas = etree.HTML(html)
    
    # 取數(shù)據(jù)
    titles = datas.xpath("http://div[@class='info']/a")  # 視頻標題
    video_urls = datas.xpath("http://div[@class='info']/a/@href")  # av號鏈接
    scores = datas.xpath("http://div[@class='pts']/div")  # 綜合得分
    ranks = datas.xpath("http://li[@class='rank-item']/div[@class='num']")  # 排名
    ups = datas.xpath("http://div/a/span[@class='data-box']")  # up
    up_ids = datas.xpath("http://div[@class='detail']/a[@target='_blank']/@href")  # upid
    plays = datas.xpath("http://div[@class='detail']/span[1]")  # 播放量
    hots = datas.xpath("http://div[@class='detail']/span[2]")  # 熱度
    contents = []
    
    for i in range(100):
        title = titles[i].text
        video_url = video_urls[i]
        score = scores[i].text
        rank = ranks[i].text
        up = ups[i].text
        up_id = up_ids[i]
        up_url = 'https:' + up_id
        play = plays[i].text
        hot = hots[i].text
        content = [title, rank, score, play, hot, up, up_url, video_url]
        contents.append(content)
    
    
    now = datetime.now().strftime('%Y%m%d_%H%M%S')
    file_name = f'{now}top.csv'
    with open(file_name, 'w+', encoding='utf-16', newline='') as f:
        f_csv = csv.writer(f)
        f_csv.writerow(['標題', '排名', '得分', '播放量', '熱度', 'up', 'upid', '視頻地址'])
        f_csv.writerows(contents)
    
xpath爬取嗶哩嗶哩日排行榜

三:動態(tài)爬蟲

上面我們提及到的爬蟲都是屬于靜態(tài)網(wǎng)站的爬蟲,該類爬蟲的資源都直接擺放在HTML頁面里面,因此十分容易爬取。但是,也有資源放置在動態(tài)JavaScript里面的網(wǎng)頁,比如我們的部分圖片網(wǎng)站。

上面我們爬取了視頻網(wǎng)站,也爬取了笑話網(wǎng)站,那么這一次我們試一下動態(tài)爬取圖片網(wǎng)站。我選擇poco這個網(wǎng)站,鏈接如下:https://www.poco.cn/,可以自己進入網(wǎng)站看看哈。

首先,為了爬取動態(tài)網(wǎng)站的資源,我們需要安裝對應瀏覽器的webdriver,以下貼出chrome的webdrive地址為:http://npm.taobao.org/mirrors/chromedriver/
Edge的webdriver地址為:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

我們除了要安裝webdriver外,還必須要為我們的python安裝selenium這個第三方包。安裝命令為

pip install selenium

如此,我們的準備工作就做完了,在我們爬取poco網(wǎng)站的圖片時,必須要注意傳入選用的webdriver的地址給selenium,否則selenium會不知道使用哪個瀏覽器,以及沒有工具打開瀏覽器。

至于其余的爬蟲思路和我們最開始提到的爬蟲套路是一模一樣的,沒有什么區(qū)別,只是我們爬蟲使用的工具換成了selenium而已。

案例:selenium爬取poco圖片

我錄制了一個視頻,上傳到了B站,可以直接點擊下方鏈接查看selenium的基礎使用:
【爬蟲】【python】動態(tài)網(wǎng)站圖片爬取之再也不怕小姐姐沒有地方放了
https://www.bilibili.com/video/BV1A7411u7Ys

四:scrapy框架的使用

無論是使用我們的requests爬取靜態(tài)資源庫,還是使用我們的selenium爬取動態(tài)資源庫,手動要寫的代碼都要寫的較多。為了寫更少的代碼,我們可以直接使用scrapy框架來進行模式化爬蟲。

在使用之前,我們必須要先安裝scrapy框架。如果直接安裝scrapy框架,會提示我們安裝一個幾個G的C框架。為了不這么麻煩,因此我們下載twisted的whl文件,本地安裝之后就可以直接安裝scripy框架了。

我們到如下網(wǎng)站:https://www.lfd.uci.edu/~gohlke/pythonlibs/,搜索twisted文件,結合你的python版本選擇whl文件下載到本地。

使用本地安裝命令

pip install '本地路徑/twisted的對應python版本文件.whl'

之后再使用pip安裝scripy即可成功安裝。

案例:一個小說爬蟲的多種實現(xiàn)方式

我依舊錄制了一個視頻,上傳到了B站,可以直接點擊下方的鏈接查看scripy的基礎使用:
[python][scrapy]一個簡單小說爬蟲的多種實現(xiàn)方式及Debug過程
https://www.bilibili.com/video/BV1Uj411f7K5

說明

  • 本文由我本人原創(chuàng),發(fā)布于簡書卯月七賬號、知乎卯月七賬號、CSDN卯月七賬號。
  • 本文允許轉(zhuǎn)載、學習,轉(zhuǎn)載請注明出處,謝謝。
  • 作者郵箱mcj6989@163.com,有問題可以聯(lián)系。
  • 本文為我整理的Python爬蟲的入門文章,更多知識可以購買專業(yè)書籍學習。
  • 創(chuàng)作不易,如果對你有幫助,希望能給我一些反饋,包括不限于點贊,評論,轉(zhuǎn)發(fā),非常感謝??!
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Python爬蟲入門(urllib+Beautifulsoup) 本文包括:1、爬蟲簡單介紹2、爬蟲架構三大模塊3...
    廖少少閱讀 10,091評論 0 6
  • 一、爬蟲介紹: 什么是爬蟲? 爬蟲就是通過編寫程序模擬瀏覽器上網(wǎng),然后讓其去互聯(lián)網(wǎng)上抓取數(shù)據(jù)的過程。 哪些語言可以...
    SlashBoyMr_wang閱讀 1,068評論 0 1
  • 這是一個適用于小白的Python爬蟲免費教學課程,只有7節(jié),讓零基礎的你初步了解爬蟲,跟著課程內(nèi)容能自己爬取資源。...
    Python編程社區(qū)閱讀 10,266評論 3 10
  • 最近一直在思考一個問題 寫文,是寫什么比較好? 看到很多老鐵在群里說,不知道寫什么話題,慢慢的就不寫了。 有些老鐵...
    L_小紅帽閱讀 207評論 0 1
  • 黯然銷魂的 又豈只是幾千年前那場難開口的道別 幾個世紀一直上演著的 還不是這終于完成了的情節(jié) 西風盡管無情 怎敵的...
    以馬為夢閱讀 213評論 0 0

友情鏈接更多精彩內(nèi)容