花12880買的【python爬蟲1000集】從基礎(chǔ)到(Scrapy+js逆向

樵夫老師
動態(tài)加載數(shù)據(jù)Web請求原理 2023-4-11 00:11:06
分兩次獲取數(shù)據(jù):第一次獲取主頁HTML框架,第二次申請純數(shù)據(jù)進行填充


案例:豆瓣電影分類排行榜 - 喜劇片
https://movie.douban.com/typerank?type_name=%E5%96%9C%E5%89%A7&type=24&interval_id=100:90&action=
-----------------------------
HTTP協(xié)議


查看requests的請求頭

如何用requests發(fā)送post請求,并直接利用json()方法獲取字典格式的json數(shù)據(jù)
get請求的數(shù)據(jù)可以直接放到url上,post請求通常要利用data關(guān)鍵字傳輸數(shù)據(jù)字典

帶參數(shù)的get請求處理


四種數(shù)據(jù)解析方式

2023-4-12 00:51:46
正則在線測試網(wǎng)站
https://tool.oschina.net/regex


匹配11位電話號碼

非貪婪模式細節(jié)講解


滿足一個正則 我就返回結(jié)果 并繼續(xù)往后找滿足匹配條件的結(jié)果
--------------------------------
re模塊
re.findall('正則表達式',匹配對象源的字符串)
結(jié)果是列表
re.finditer('正則表達式',匹配對象源的字符串)
結(jié)果是迭代器,需要用循環(huán)取出(此時變成Match對象)再用group()方法
\d+ 表示匹配至少一個數(shù)字


re.search('正則表達式',匹配對象源的字符串)
找到第一個符合查找要求的結(jié)果,返回結(jié)果是Match對象,需要用group()方法


re.match('正則表達式',匹配對象源的字符串)
返回結(jié)果是Match對象,需要用group()方法

預(yù)加載
預(yù)加載正則的變量.findall(匹配源對象)


Re提取分組數(shù)據(jù)



需要找時間練習(xí)一個這些正則操作 2023-4-12 01:13:12
---------------------------------
P18 實戰(zhàn) 2023-4-25 22:10:16
https://movie.douban.com/top250
數(shù)據(jù)全在url里面


import re
import requests
url='https://movie.douban.com/top250'
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36'
}
response=requests.get(url,headers=headers).text
obj = re.compile('<div class="item">.*?<span class="title">(?P<title>.*?)</span>.*?'
'<p class="">.*?導(dǎo)演:(?P<editor>.*?) .*?'
'<br>(?P<year>.*?) .*?'
'property="v:average">(?P<score>.*?)</span>.*?'
'content="10.0">.*?<span>(?P<comment>.*?)</span>',re.S)
result = obj.finditer(response)
for item in result:
title=item.group('title')
editor=item.group('editor')
year=item.group('year').strip()
score=item.group('score')
comment=item.group('comment')
print(title,editor,year,score,comment)
html基本語法

css基礎(chǔ)語法

-------------------------------
javascript 入門 2023-4-25 22:39:14


以往用戶注冊的流程:
會將用戶信息打包成from表單,再post給服務(wù)器驗證。服務(wù)器在用戶注冊過程就需要來回多次驗證,給服務(wù)器造成很大的資源浪費
- js可以獲取html里面的內(nèi)容
- js可以操縱頁面上的一些內(nèi)容
由此可以實現(xiàn)的功能:
- 數(shù)據(jù)加密
- 特效功能
后續(xù)node.js 可以作為一個完整的后端服務(wù)
補充:Node.js 是一個基于Chrome V8 引擎的JS的運行環(huán)境
傳統(tǒng)web開發(fā),前端用js寫 后端服務(wù)器用 ruby java 或 php, Node.js出來以后 js就可以前后端通吃
- js可以操作頁面上的數(shù)據(jù),可以在瀏覽器上進行數(shù)據(jù)校驗,比如核對郵箱格式是否正確,可以減輕服務(wù)器的壓力
- 運行在瀏覽器上,依賴瀏覽器存在的

html的注釋
- <!-- 內(nèi)容 --> 多行注釋
js的注釋
- //
- /* */

在html中引入js代碼的兩種方式
- 直接寫在script標(biāo)簽里面
- 通過src(source 來源)屬性 添加js文件路徑來引入

js 和 html執(zhí)行是按順序進行的 加載有先后順序,不同順序 執(zhí)行效果不同
js的基本數(shù)據(jù)類型

- null 是空對象
- undefined 沒有定義的東西
------------------------
js的基本語法 2023-4-28 11:27:30
number 數(shù)據(jù)類型

- 在js中 整數(shù)和浮點數(shù) 都是number類型
- 聲明 但沒給值就調(diào)用 返回結(jié)果是undefined
- alert() 方法的作用
- console.log() 方法的作用 向控制臺輸出打印結(jié)果 等效 python 中的 print()
js 數(shù)據(jù)類型轉(zhuǎn)化

- 字符串拼接
- 字符串轉(zhuǎn)整型 parseInt() parseFloat()
- 數(shù)字轉(zhuǎn)字符串 點toString() 兩種方式

js 的布爾值


js 的對象

- Array() 相當(dāng)于新建一個列表對象
三元表達式


i++ 與 ++i 的區(qū)別 以及一個表達式問題

字符串分割

字符串操作


- js 變量 使用前必須聲明
js中的條件判斷

- js中 每條語句結(jié)束建議寫上分號 不寫也不會出錯
- if 條件用() 小括號 執(zhí)行語句放在{ } 花括號里面,括號內(nèi)可以隨意填寫縮進 空格等
- 因此 有混淆(縮進混亂)和壓縮 概念

if ... else if ... else

switch

- 用 break 中斷后續(xù) 穿透

三、JS中的循環(huán)語句
while循環(huán)

do while循環(huán)

for 循環(huán)


- let 聲明臨時變量
for 循環(huán)的第二種寫法


forEach ( 函數(shù)()) 寫法
map() 方法補充 2023-4-28 22:12:58

四、js中的數(shù)組和對象


對象

五、 js中的函數(shù)(重點)

2023-4-28 12:02:17


前端的坑
- 動態(tài)類型一時爽,重構(gòu)代碼火葬場
- 總會把一個函數(shù)直接賦值給一個變量

- 函數(shù)的調(diào)用

- 相當(dāng)于定義了一個 $( 參數(shù)) 的函數(shù)
不用起名字的 自運行函數(shù)

- 相當(dāng)于沒有命名的函數(shù)

利用閉包和自運行函數(shù) 解決變量沖突問題
函數(shù)return問題


let 局部變量
var 全局變量
const 不可更改變量

-----------------------------
md5庫運算

利用urllib的encode
對url進行編碼

url反解成中文信息
