一般步驟:確定網站--搭建關系--發送請求--接受響應--篩選數據--保存本地
1.拿到網站首先要查看我們要爬取的目錄是否被允許
一般網站都會議/robots.txt目錄,告訴你哪些地址可爬,哪些不可爬,以安全客為例子
2. 首先測試在不登錄的情況下是否請求成功
?可見,該請求成功;有很多網站在沒有登錄的情況下是請求失敗的,這時需要添加請求頭信息,
haders={},
2.1、首先 F12 到 Network 下,F5刷新?,復制 Requests Headers然后把它轉換成 json 格式
?2.1.1 Requests Headers 轉 json 格式有很多種方法
1. 在線轉 json 格式的網站:在線HTTP請求/響應頭轉JSON工具 - UU在線工具
2.如果電腦沒網 在終端下載:pip install feapder
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?feapder create -j?
req=requests.get(url=url).text? 是把所有的文本都提取出來,會很亂,所有我們需要篩選,整理一下
可以發現,我們需要的數據在 a 標簽中
<a target="_blank" href="/post/id/291754">蘋果委托進行數據泄露研究,以強調端到端加密的必要性</a>
數據多了id位數也可能會增加;也可以把id寫死,根據291754是個六位數,所以 \d{6}只匹配 id是六位數的。
Title=re.findall(r'<a target="_blank" href="/post/id/\d+">(.*?)</a>',req)
?\d+
注意代碼格式?
range() 取值 [?)
?最終代碼:
import re
import requests
#headers={}
url='https://www.anquanke.com/'
req=requests.get(url=url).text
# print(req)
dict={}
for i in range(1,20):dict['Title']=re.findall(r'<a target="_blank" href="/post/id/\d+">(.*?)</a>',req)[i]dict['url']=re.findall(r'<a target="_blank" href="(/post/id/\d+)">',req)[i]print(dict)
?優化后的代碼:
import re
import requests
url='https://www.anquanke.com/'
req=requests.get(url=url)
print(req.status_code)
req=req.text
dict={}
Title=re.findall(r'<a target="_blank" href="(/post/id/\d+)">(.*?)</a>',req)
# print(Title)
for title in Title:dict['Title']=title[1]dict['url']=url+title[0]print(dict)
?