您好,登錄后才能下訂單哦!
直接先說準(zhǔn)備工作:
(1)清楚爬蟲工作的流程:
向頁面發(fā)出請求---------獲取請求文件---------處理請求文件--------抽取自己想要的內(nèi)容
(2)要用到的函數(shù)與庫
主要是requests庫: 負(fù)責(zé)去向頁面發(fā)出請求
beautiSoup4庫:對抓取的頁面文檔進(jìn)行解析
re庫:匹配所需字段
可能存在的問題:
(1)編碼的問題:注意頁面中,以及讀寫的編碼
(2)循環(huán)讀取頁面時(shí)注意頁面訪問地址的變化情況
完整代碼:
import requests
from urllib3 import request
import re
class Spider:
def __init__(self):
# 初始化起始頁位置
self.page = 1
#爬取開關(guān),如果為True繼續(xù)爬取
self.switch = True
def loadPage(self):
"""
作用:下載頁面
"""
print("正在下載數(shù)據(jù)....")
#這個(gè)頁面的下載規(guī)則
url = "http://www.neihan8.com/article/list_5_" + str(self.page) + ".html"
headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
response = requests.get(url, headers = headers)
#處理編碼
response.encoding=response.apparent_encoding
#獲取每頁的HTML源碼字符串
html = response.text
#創(chuàng)建正則表達(dá)式規(guī)則對象,匹配每頁里的段子內(nèi)容,re.S 表示匹配全部字符串內(nèi)容
pattern = re.compile('<div\sclass="f18 mb20">(.*?)</div>', re.S)
#將正則匹配對象應(yīng)用到html源碼字符串里,返回這個(gè)頁面里的所有段子的列表
content_list = pattern.findall(html)
#調(diào)用dealPage() 處理段子里的雜七雜八
self.dealPage(content_list)
def dealPage(self, content_list):
"""
處理每頁的段子
content_list : 每頁的段子列表集合
"""
for item in content_list:
# 將集合里的每個(gè)段子按個(gè)處理,替換掉無用數(shù)據(jù)
item = item.replace("<p>","").replace("</p>", "").replace("<br>", "")
#處理完后調(diào)用writePage() 將每個(gè)段子寫入文件內(nèi)
self.writePage(item)
def writePage(self, item):
"""
把每條段子逐個(gè)寫入文件里
item: 處理后的每條段子
"""
#寫入文件內(nèi)
print("正在寫入數(shù)據(jù)....")
#編碼的處理
with open(r"duanzi1.txt", "a",encoding="utf-8") as f:
f.write(item)
def startWork(self):
"""
控制爬蟲運(yùn)行
"""
#循環(huán)執(zhí)行,直到 self.switch == False
while self.switch:
# 用戶確定爬取的次數(shù)
self.loadPage()
command =input("如果繼續(xù)爬取,請按回車(退出輸入quit)")
if command == "quit":
# 如果停止爬取,則輸入 quit
self.switch = False
#每次循環(huán),page頁碼自增
self.page += 1
print("謝謝使用!")
if __name__ == "__main__":
duanziSpider = Spider()
duanziSpider.startWork()
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。