Python爬蟲實戰之解密HTML

2021-09-25 14:58:19 字數 3835 閱讀 2736

1.增加本人csdn訪問量

2.當作乙個python的練手專案

3.想寫出更優質的部落格技術文章,不再為了訪問量去寫文章。

# author:ytouch

# date:2019/07/27

# this py is used for brushing pageview for csdn

# 匯入相關爬蟲庫和解析xml庫即可

import time

from pyquery import pyquery as pq

import requests

from bs4 import beautifulsoup

'''請求頭'''

headers =

'''**ip'''

proxies =

# 爬取csdn類

class scrapymycsdn:

''' class for csdn'''

def __init__(self,blogname):

'''init 類似於建構函式 param[in]:blogname:部落格名'''

csdn_url = '' #常規csdnurl

self.blogurl = csdn_url+blogname #拼接字串成需要爬取的主頁url

''' func:獲取寫了多少篇原創文章 '''

''' return:寫了多少篇原創文章'''

def getoriginalarticalnums(self):

main_response = requests.get(self.blogurl,headers=headers,proxies=proxies)

# 判斷是否成功獲取 (根據狀態碼來判斷)

if main_response.status_code == 200:

print('獲取成功')

self.main_html = main_response.text

main_doc = pq(self.main_html)

mainpage_str = main_doc.text() #頁面資訊去除標籤資訊

origin_position = mainpage_str.index('原創') #找到原創的位置

end_position = mainpage_str.index('原創',origin_position+1) #最終的位置,即原創底下是數字多少篇博文

self.blog_nums = ''

# 獲取寫的部落格數目

for num in range(3,10):

#判斷為空格 則跳出迴圈

if mainpage_str[end_position + num].isspace() == true:

break

self.blog_nums += mainpage_str[end_position + num]

cur_blog_nums = int(self.blog_nums) #獲得當前部落格文章數量

return cur_blog_nums #返回博文數量

else:

print('爬取失敗')

return 0 #返回0 說明博文數為0或者爬取失敗

''' func:分頁'''

''' param[in]:nums:博文數 '''

''' return: 需要爬取的頁數'''

def getscrapypagenums(self,nums):

self.blog_original_nums = nums

if nums == 0:

print('它沒寫文章,0頁啊!')

return 0

else:

print('現在開始計算')

cur_blog = nums/20 # 獲得精確的頁碼

cur_read_page = int(nums/20) #保留整數

# 進行比對

if cur_blog > cur_read_page:

self.blog_original_nums = cur_read_page + 1

print('你需要爬取 %d'%self.blog_original_nums + '頁')

return self.blog_original_nums #返回的數字

else:

self.blog_original_nums = cur_read_page

print('你需要爬取 %d'%self.blog_original_nums + '頁')

return self.blog_original_nums

'''func:開始爬取,實際就是刷瀏覽量hhh'''

'''param[in]:page_num:需要爬取的頁數'''

'''return:0:瀏覽量刷失敗'''

def begintoscrapy(self,page_num):

if page_num == 0:

print('連原創部落格都不寫 爬個鬼!')

return 0

else:

for nums in range(1,page_num+1):

self.cur_article_url = self.blogurl + '/article/list/%d'%nums+'?t=1&' #拼接字串

article_doc = requests.get(self.cur_article_url) #訪問該**

# 先判斷是否成功訪問

if article_doc.status_code == 200:

print('成功訪問**%s'%self.cur_article_url)

#進行解析

cur_page_html = article_doc.text

soup = beautifulsoup(cur_page_html,'html.parser')

for link in soup.find_all('p',class_="content"):

requests.get(link.find('a')['href']) #進行訪問

else:

print('訪問失敗')

print('訪問結束')

#如何呼叫該類

mycsdn = scrapymycsdn('giser_d') #初始化類 引數為部落格名

cur_write_nums = mycsdn.getoriginalarticalnums() #得到寫了多少篇文章

cur_blog_page = mycsdn.getscrapypagenums(cur_write_nums) #cur_blog_page:返回需要爬取的頁數

for i in range(1,60):

mycsdn.begintoscrapy(cur_blog_page)

time.sleep(10) # 給它休息時間 還是怕被封號的

使用方法比較簡單: 首先是初始化類 類引數是自己的部落格名

mycsdn = scrapymycsdn('giser_d') #初始化類 引數為部落格名其餘引數不用改執行即可

python環境為3.0版本及以上需要安裝相關庫

pip install pyquery

pip install requests

pip install bs4

write by ytouch

更新說明:

8.18前更新版本,主要是修復不同ip訪問的問題

之後完善

增加訪問 訪問同篇博文功能

改進版參考這位大佬:baidu_31657889/article/details/100120435

python爬蟲實戰

python python基礎 python快速教程 python學習路線圖 python大資料學習之路 python爬蟲實戰 python pandas技巧系 量化小講堂 python機器學習入門資料梳理 學習群 大資料 python資料探勘2 323876621 r r語言知識體系 怎樣學習r ...

每日學點python之十五 爬蟲實戰

上節講了理論,這節我們練習一下。我們寫個簡單的看看,方面理解。usr bin python coding utf 8 file 爬蟲.py brief author songqiang version 1.0 date 2019 01 10 import urllib2 向指定的url位址傳送請求,...

Python爬蟲實戰(二)

實驗介紹 本實驗通過使用beautifulsoup方法對網頁進行簡單的爬取工作,並對beatifulsoup方法進行簡單的介紹。beautifulsoup開發手冊 示例網頁如下 實驗內容 從本地網頁爬取商品資訊,商品名,評分等級等相關資訊 實驗 from bs4 import beautifulso...