爬蟲原理
- 發送數據
- 獲取數據
- 解析數據
- 保存數據
requests請求庫
res = requests.get(url="目標網站地址")
獲取二進制流方法:res.content
獲取文本方法:res.text
re正則模塊
re.findall("匹配規則","獲取到的數據","匹配模式")
re.findall('<div class="item">.*?<a href="(.*?)">.*?<span class="title">(.*?)</span>.*?<span class="rating_num" property="v:average">(.*?)</span>.*?<span>(.*?)人評價</span>', response.text, re.S)
貪婪匹配:.*? 過濾任何內容
非貪婪匹配:(.*?) 提供內容
with open() 保存數據
with open(): # wt(write + txt) wb (write + bytes)
爬蟲精髓
-
分析網站的通信流程
-
分析查找數據從何而來
-
分析目標網站的反爬策略
-
根據目標網站的反爬策略編寫攻擊手段,獲取數據
json格式化
json是一種第三方的數據格式
python中可以使用方法將json轉換為可讀取的數據類型
json.jumps() #將python數據格式轉換為json格式
json.loads() #將json格式轉換為python數據格式
爬取豆瓣電影排行榜top250
#導入requests庫
import requests
import json
#分析豆瓣網站每頁數據的url,利用for循環將每頁進行 解析數據操作
num = 0
for i in range(10):
url = f"https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start={num}&limit=20"
num += 20
#獲取數據並將獲取到的json數據轉換為python格式數據類型
w = requests.get(url=url)
w = json.loads(w.text)
#利用json轉換完成后為列表類型,可在上面用print(type())查看類型,利用for循環將列表的每個元素讀取,進行索引取值。
for line in w:
move_name = line["title"]
move_grade = line["rating"][0]
move_url = line["url"]
move_type = line["types"]
move_rank = line["rank"]
move_list = f'''
電影名字:{move_name}
電影分數:{move_grade}
電影鏈接:{move_url}
電影類型:{move_type}
電影排行:{move_rank}
'''
#保存數據
with open("douban2.txt","a",encoding="utf8") as f:
f.write(move_list + "\n")