**:
雖然幾個挑戰沒寫完,簡單的看了一下,爬蟲工作過程中一些問題在這裡都有展示,是乙個可以檢驗爬蟲工作者的能力的**,跟玄幻**中挑戰塔一樣。
說一下,第5個挑戰 css反爬:通過css修改了樣式,在頁面上看到的數字展示跟原始碼中的展示不一樣
直接上**了。。。
import re
from operator import itemgetter
import requests
from lxml import etree
items =
url =
'level/web/crawler-css-puzzle-1'
headers =
response = requests.get(url, headers=headers, timeout=20)
# print(response.content.decode())
html = etree.html(response.content.decode())
divs = html.xpath(
'//div[@class="row"]/div[@class="col-md-1"]'
)result =
0# print(len(divs))
for div in divs:
clas = div.xpath(
'./div'
) a_items =
# 獲取每個數字所在位置
left =
1# 數字第幾位
for cla in clas:
class_name = cla.xpath(
'./@class'
) res = class_name[0]
+'.*'
div_num = cla.xpath(
'./text()'
)# 獲取每乙個的值
class_value = re.findall(res, response.content.decode())
item =
for value in class_value:
vals = value.split(
':')
item[vals[0]
.strip()]
= vals[1]
.strip(
).strip(
'em'
) valu =
false
if'opacity'
in item:
if item[
'opacity']==
0:# 隱藏元素
pass
elif
'content'
in item:
# 該位置顯示的最後
result = item[
'content'
]# print(type(result), int(result.strip('"')))
int(result.strip(
'"')))
elif
'left'
in item:
valu = left +
int(item[
'left'])
# 元素移動之後所在位置
else
: valu = left # 元素保持原來的位置
if valu:
left +=
1 item_num =
item_num[
'num']=
''.join(div_num)
item_num[
'valu'
]= valu
if a_items:
a_items.sort(key=itemgetter(
'valu'
), reverse=
false
) nums =
''for item in a_items:
num = item[
'num'
] nums += num
int(nums)
)# 這一頁所有的資料列表
print
(items)
檢查每乙個元素 屬性裡面的 class 類,在原始碼中代表什麼意思。多看幾遍就會有發現 glidedsky挑戰 CSS反爬
相應頁面 分析這個頁面的特點 頁面顯示出來的資料不同 頁面中部分顯示的資料可能在標籤中不顯示 頁面 現數字順序是亂的,不好組合拼接,如第3個字元 346對應634 頁面中,有些字元還出現其它的數字來擾亂數字。是不是這些資料似曾相識,沒錯了,這些css 就是頁面數字顯示出來的規則。沒辦法了,那就分析 ...
glidedsky爬蟲之css反爬蟲
author cjp file cssfan.py time 2020 9 11 16 37 import re from operator import itemgetter import requests from lxml import etree defgao url items heade...
CS,五,演算法
這章開始講演算法了,演算法是cs 的核心主題。在計算機能夠完成乙個任務之前,必須給出乙個演算法來精確地告訴計算機去做什麼,這裡說的演算法,是廣義上的執行步驟,並不是說你單純的 if else 就不能叫演算法了,只要是一系列計算機執行步驟,都能稱得上是演算法。演算法的定義 乙個可終止過程的一組有序的,...