Python 網絡爬蟲筆記2 – Requests庫實戰
Python 網絡爬蟲系列筆記是筆者在學習嵩天老師的《Python網絡爬蟲與信息提取》課程及筆者實踐網絡爬蟲的筆記。
課程鏈接:Python網絡爬蟲與信息提取
參考文檔:
Requests 官方文檔(英文)
Requests 官方文檔(中文)
Beautiful Soup 官方文檔
re 官方文檔
Scrapy 官方文檔(英文)
Scrapy 官方文檔(中文)
1、Robots 協議
作用: 網站告知網絡爬蟲哪些頁面可以抓取,哪些不行
形式: 在網站根目錄下的robots.txt文件
Robots協議基本語法:
- User-agent:訪問對象,*代表所有
- Disallow:不予許爬取的目錄,/代表根目錄
# 京東Robots 協議:https://www.jd.com/robots.txt
User-agent: *
Disallow: /?*
Disallow: /pop/*.html
Disallow: /pinpai/*.html?*
User-agent: EtaoSpider
Disallow: /
User-agent: HuihuiSpider
Disallow: /
User-agent: GwdangSpider
Disallow: /
User-agent: WochachaSpider
Disallow: /
2、京東商品頁面的爬取
- 訪問京東網站,獲取所要爬取商品的url鏈接
- 使用爬取網頁的通用代碼框架
import requests
def get_html_text(url):
"""
爬取網頁的通用代碼框架
"""
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return '產生異常'
def jd_goods():
"""
爬取京東上的某個商品,以華爲 mate20 爲例
"""
url = 'https://item.jd.com/100000822981.html'
print(get_html_text(url))
3、亞馬遜商品頁面的爬取
- 訪問亞馬遜網站,獲取所要爬取商品的url鏈接
- 亞馬遜會拒絕非瀏覽器的請求,需修改url頭部,僞裝成瀏覽器發送請求
- 修改爬取網頁的通用代碼框架
import requests
def amazon_goods():
"""
爬取京東上的某個商品,以Kindle爲例
"""
url = 'https://www.amazon.cn/gp/product/B07746N2J9'
try:
hd = {'user-agent': 'Mozilla/5.0'}
r = requests.get(url, headers=hd)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[0:1000])
except:
print('爬取失敗')
if __name__ == '__main__':
amazon_goods()
4、百度/360搜索關鍵字提交
- 百度的關鍵詞接口:http://www.baidu.com/s?wd=keyword
- 360的關鍵詞接口:http://www.so.com/s?q=keyword
import requests
def baidu_search():
"""
使用百度搜索引擎,提交關鍵詞查詢
"""
url = 'http://www.baidu.com/s'
try:
kv = {'wd': 'python'}
r = requests.get(url, params=kv)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text)
except:
print('爬取失敗')
if __name__ == '__main__':
baidu_search()
5、網絡圖片的爬取和存儲
- 獲取圖片的url鏈接
- 設置圖片保存路徑
- 下載圖片並保存
import requests
import os
def download_image():
"""
爬取圖片,以百度的logo爲例
"""
url = 'https://www.baidu.com/img/bd_logo1.png'
root = 'E:/pics/'
path = root + url.split('/')[-1]
try:
if not os.path.exists(root):
os.mkdir(root)
if not os.path.exists(path):
r = requests.get(url)
with open(path, 'wb') as f:
f.write(r.content)
f.close()
print('圖片保存成功')
else:
print('圖片已存在')
except:
print('爬取失敗')
if __name__ == '__main__':
download_image()
6、IP地址歸屬地查詢
- 138 IP地址歸屬地查詢接口:http://m.ip138.com/ip.asp?ip=ipaddress
- 查詢百度網站的ip地址,在cmd中輸入:nslookup www.baidu.com
import requests
def ip_attribution():
"""
IP地址歸屬地查詢, 使用138的接口查詢百度的IP歸屬地
"""
url = 'http://m.ip138.com/ip.asp?ip='
ip = '14.215.177.39'
try:
r = requests.get(url+ip, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text)
except:
print('查詢失敗')
if __name__ == '__main__':
ip_attribution()