Python 網絡爬蟲筆記2 -- Requests庫實戰

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搜索關鍵字提交


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地址歸屬地查詢


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()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章