我的第一次爬網頁經歷

2021-07-27 22:11:07 字數 3454 閱讀 4317

之前我從來沒有爬過網頁,一直對scrapy很好奇,這周一粽子讓我去爬一下

的工單管理-》已提交結果工單-》舉報內容摘要/來電時間,一共有100多條,看起來需要一條一條點開才行。

我之前對網頁有了一點小小的積累,大致明白了cookie,post,get,html這方面的知識,因此覺得應該是能夠勝任的,因此就愉快得答應了下來。

不過我一開始走了不少彎路,最後抓出網頁資訊的時候,也是瞎貓碰到死耗子,並不能說以後就能成功了,而且或許這個換台電腦,關閉一下瀏覽器未必能夠成功。

我的學習路線大致是這樣的:

然後我就發現原始碼裡面並沒有完整的資訊嘛,只是乙個html的骨架

而element裡面的資訊到時全面的,因此我一開始想著是不是應該把網頁整體拉下了,然後去解析html,把資料提取出來,而後的實踐我發現至少我這次用半天時間沒有做出來。

幾個教程:

我先學這個)

扒的**:

xpath語法

request的高階用法

其中最重要的是yield語法,在scrapy裡面,它會產生新的執行緒,或者儲存item,或者給出下乙個請求

要爬的**裡面並沒有url。。。後來我看到乙個詞,叫

動態網頁

,可能說的就是這個

我只能去檢視chrom裡面的network,看看是否有get和post請求了,後來我看到了2個請求:

它們中乙個是主頁的請求,乙個是詳情頁的請求

主頁請求list.do的request中帶有引數page,limit,start;response中則返回指定數量的已提交工單的編號

詳情頁請求detail.do中請求引數則正好需要上面的已提交工單的編號!

因此,只要先請求list.do,把所有已提交工單的編號都拿到,然後用這個編號請求detail.do就能獲得詳情頁的所有資訊了。

我在postman上試了一下,又填了乙個坑:該**是需要登入的,因此要用cookie訪問這些介面,但postman沒找到填cookie的地方,後來我又上網搜了一下,發現只要開啟postman的***就行了,它會自動把chrome瀏覽器的cookie填進來

於是,**就很容易寫了,這其中對關鍵字段的定位,我用了找規律的本辦法,想來這樣也沒關係,順帶處理了異常和多執行緒訪問

# -*- coding: utf-8 -*-

import threading

import requests

import json

cookies =

url_frontpage = ""

url_detail = ""

limit = "500" # 每頁展示的工單條數

count = 0 # 輸出的是第幾個工單

def get_url_list():

"""呼叫list.do介面,獲取所有已提交結果工單的id,構成乙個列表返回

:return:

"""querystring = # 一頁展示的工單數

headers =

response = requests.request("get", url_frontpage, headers=headers, params=querystring, cookies=cookies) # 訪問列表介面,獲取工單ids

ret1 = json.loads(response.text)

entityrecordids = [ele["tjjggongdanrwgdidfk"]for ele in ret1["data"]]

return entityrecordids

def get_jubaoneirongzhaiyao(entityrecordid):

"""傳入工單id,呼叫detail.do介面,獲得工單詳情

:param entityrecordid:

:return:

"""global count

querystring =

payload = ""

headers =

response = requests.request("post", url_detail, data=payload, headers=headers, params=querystring, cookies=cookies)

text = response.text

ret = json.loads(text)

# 建議下面一段**加個鎖,這樣可以防止亂序

count += 1

print(u"第"+str(count)+u"條")

try:

print(ret["recordname"]+u" 舉報內容摘要 "+ret['sectionlist'][1]["items"][2]["items"][0]["value"]) # 獲取任務編號和舉報內容摘要

except:

print ret.get("recordname", u"未知錯誤 "+ "id: "+entityrecordid)+u" 舉報內容摘要"+u" 空 "

#def multi_thread_url():

"""多執行緒獲取數百個詳情頁的資訊

:return:

"""entityrecordids = get_url_list()

print(u"總共有" + str(len(entityrecordids)) + u"條")

for entityrecordid in entityrecordids:

t =threading.thread(target=get_jubaoneirongzhaiyao, args=(entityrecordid,))

t.start()

multi_thread_url()

最後的輸出如下圖所示:

首先沒有進一步了解scrapy,跳過了其中的難點,對於動態網頁,應該有其他方式來抓取

其次可以做乙個自動登入的動作,把cookie取到,就不用手動改cookie了

最後,要能夠在windows下執行

我的第一次面試經歷

已經發在csdn過了,發來讓大家參考下 介紹下基本情況 91年生的,沒有it工作經驗,高中未畢業,c c 自學的 22號去廈門面試,8點左右出發,到廈門後對廈門不熟,自己乙個人傻傻走了1個多小時,腳疼死了。到公司的時候11點左右,公司是做手機開發的,其實他說是下午三點的,不過我原本估計要找很久,本來...

第一次筆試經歷

今天去參加了人生中第一次應聘的筆試,感受很深,也引起了我不少的反思。本人大三黨一枚,電腦科學與技術專業,說實話大學的前一年半真的是在玩遊戲中虛度了,大二的下學期才迷途知返。戒掉了遊戲,然後摸索了兩個月,最後又回到了遊戲這個方向,只不過從當年的玩遊戲,變成了寫遊戲,自己寫過幾個windows平台下小的...

第一次應聘經歷

應聘了了乙個c 伺服器開發崗,對於應屆生來說還是較難,然後,作為乙個不知名院校,還是被歧視了,心裡很難受。終歸還是自己硬實力不夠,很多基礎的概念雖然是理解的,其實最終的本質還是沒有真正去理解。老師講的也是表面上的,讓你入個門,知道有這個東西罷了,真正要理解實質,自己下來要花很多很多時間才行。眼看著秋...