對一次爬蟲的總結

前言

大數據決賽要開始了,團隊裏數據爬取的任務就交給我吧
在這裏插入圖片描述
找到一個例題
在這裏插入圖片描述

讓我們來搞一手吧。

爬取前的準備

所用語言:python
所用的庫:bs4,requests,urllib,re
這兩個庫是一定沒有的,我們需要下載:

pip install beautisoup4
pip install requests

其他兩個庫如果沒有的話也自行pip下載。
如果你連pip都沒有的話回頭另講:

爬取時

目標網站
先附上爬取代碼:

import requests
import re
from bs4 import BeautifulSoup
from urllib import request

url = 'https://www.discuz.net/forum-10-1.html'
res = request.urlopen(url)#打開鏈接
print(res)
soup = BeautifulSoup(res,'html.parser')#返回網頁源代碼
#然後我們在用find去找相關標籤包含的東西
t_div = soup.findAll('a',attrs={"c":"1"})
a = 1
author = []

# author's name
for i in t_div:
    if a%2 == 0:
        a += 1
        continue
    a += 1
    author.append(i.text)

th = soup.findAll('a',attrs={"class":"showcontent y"})
d = str(th)
tid = re.findall('\'\d+\'',d)
uid = re.findall('uid=\d+',str(t_div))
print("tid",    " author",  "uid")
for i in range(len(tid)):
    print (tid[i][1:-1],author[i],uid[i][4:])

在這裏插入圖片描述這裏面是不是有個 c = 1,所以下面這句話就是用來獲得所有c=1的a標籤的內容

t_div = soup.findAll('a',attrs={"c":"1"})

如果我們直接用for循環遍歷的話,會發現他把作者和最後發言人一塊給記錄下來了。那我們就隔一個輸出一個不就行了。
用戶名爬取完成,再看看a標籤中的href裏發現這裏有作者的uid,這裏我們使用正則表達式來進行匹配

uid = re.findall('uid=\d+',str(t_div))

這樣就把uid以列表的形式儲存在了uid裏。
關於正則表達式,傳送鏈接:正則表達式
用戶id也爬取完成了,我們再找找帖子的tid:
在這裏插入圖片描述
很容易發現這裏有個CONTENT_TID我們也使用正則表達式給他匹配出來

th = soup.findAll('a',attrs={"class":"showcontent y"})
d = str(th)
tid = re.findall('\'\d+\'',d)

我們這樣就可以把a標籤中含有class爲‘showcontent y’的蒐集出來,然後匹配出TID儲存到TID裏。
爲了匹配的準確性,我在匹配的時候加了一些關鍵字:UID裏我使用了uid=xxxx
這時候我們再用切片給它刪掉,這樣就是正常的UID了,TID同理把頭和尾的雙引號去掉。

for i in range(len(tid)):
    print (tid[i][1:-1],author[i],uid[i][4:])

在這裏插入圖片描述
這樣就得到了你想要的數據。

注意事項

爬取需謹慎,爬取到敏感、他人隱私信息是要坐牢的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章