設為首頁收藏本站

艾歐踢論壇

 找回密碼
 立即註冊

QQ登錄

只需一步,快速開始

搜索
熱搜: 活動 交友 discuz
查看: 257|回復: 0
打印 上一主題 下一主題

爬蟲進化 – 偽裝篇 fake_useragent 介紹

[複製鏈接]
跳轉到指定樓層
樓主
發表於 2023-4-20 22:16:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
介紹一個 Python 套件 fake_useragent,他可以讓我們將程式加上一個 User-Agent,假裝是一個瀏覽器在瀏覽該網站。
User-Agent
如果你按 F12 [開發者工具] → Network → 查看某一個資源的 Request Headers
就可以看到一個 User-Agent 的欄位,那個就是你的瀏覽器會發出去的一串文字,告訴對方你的瀏覽器是什麼、作業系統是什麼。
一般瀏覽器常見的 User-Agent 的格式是
User-Agent: Mozilla/5.0 (<system-information>) <platform> (<platform-details>) <extensions>

fake-useragent 套件
fake-useragent 套件可以幫助你隨機產生 User-Agent 字串,比起在程式裡寫死的一串文字,fake-useragent 有兩大優點特色:
白話文翻譯翻譯:
  • 自動從 useragentstring.com 抓最新的 user-agent 字串,瀏覽器會更新,User-agent字串當然也需要更新!
  • 根據 w3schools.com 統計的瀏覽器使用頻率來產生 user-agent 字串,要偽裝就偽裝到底,瀏覽器出現的頻率也可以考慮進去!
用 pip 安裝
$ pip install fake_useragent
import 套件並產生一個 UserAgent
from fake_useragent import UserAgentua = UserAgent()
試試看產生不同瀏覽器的 User-Agent 字串
  1. ua.ie
複製代碼

‘Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; chromeframe/12.0.742.112)’
  1. ua.google
複製代碼

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36’
  1. ua.firefox
複製代碼

‘Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0’
  1. ua.safari
複製代碼

‘Mozilla/5.0 (Windows; U; Windows NT 6.0; de-DE) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4’
ua.random
最厲害、最實用、實做中最常用到的是 ua.random,根據真實世界的統計隨機產生一個 User-Agent 字串。
  1. ua.random
複製代碼

用 requests 實戰股票爬蟲
聲明:本網站上的爬蟲教學為純粹技術分享,請不要進行大量、高頻的爬蟲做出不正當的行為,造成他人的困擾及損害他人的權利!
Python 股票分析教學 : 爬取台積電 (2330) 歷史股價中我們教大家如何從臺灣證券交易所 爬取台積電的股價及其他日成交資訊:
  1. import requests
  2. import pandas as pd

  3. dates = [20200201, 20200101, 20191201]
  4. stockNo = 2330
  5. url_template = "https://www.twse.com.tw/exchangeReport/STOCK_DAY?response=html&date={}&stockNo={}"

  6. for date in dates :
  7.     url = url_template.format(date, stockNo)
  8.     file_name = "{}_{}.csv".format(stockNo, date)
  9.    
  10.     data = pd.read_html(requests.get(url).text)[0]
  11.     data.columns = data.columns.droplevel(0)
  12.     data.to_csv(file_name, index=False)
複製代碼

現在我們可以加進 fake_useragent 強化我們的爬蟲:
  1. user_agent = ua.random
  2. headers = {'user-agent': user_agent}
複製代碼

並且在使用 requests 時把我們創造的 header 加進去
  1. requests.get(url, headers=headers)
複製代碼

另外我們也可以在每爬完一個檔案後,讓爬蟲休息一下,因為如果短時間內大量爬取檔案,有很大的機率會被該網站擋下來、鎖 IP。
  1. time.sleep(5)
複製代碼
完整程式碼
聲明:本網站上的爬蟲教學為純粹技術分享,請不要進行大量、高頻的爬蟲做出不正當的行為,造成他人的困擾及損害他人的權利!
  1. import requests
  2. import pandas as pd
  3. import time
  4. from fake_useragent import UserAgent


  5. dates = [20200201, 20200101, 20191201]
  6. stockNo = 2330
  7. url_template = "https://www.twse.com.tw/exchangeReport/STOCK_DAY?response=html&date={}&stockNo={}"
  8. ua = UserAgent()
  9. user_agent = ua.random

  10. for date in dates :
  11.     # 產生 headers
  12.     headers = {'user-agent': user_agent}
  13.    
  14.     # url
  15.     url = url_template.format(date, stockNo)
  16.    
  17.     # output file name
  18.     file_name = "{}_{}.csv".format(stockNo, date)
  19.    
  20.     # 開始爬取檔案
  21.     data = pd.read_html(requests.get(url, headers=headers).text)[0]
  22.     data.columns = data.columns.droplevel(0)
  23.     data.to_csv(file_name, index=False)
  24.     time.sleep(5)
複製代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 轉播轉播 分享分享 分享淘帖
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

小黑屋|Archiver|手機版|艾歐踢創新工坊    

GMT+8, 2024-4-29 19:44 , Processed in 0.269703 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表