當前位置:首頁 » 編程語言 » python偽裝成瀏覽器

python偽裝成瀏覽器

發布時間: 2022-05-07 06:08:18

㈠ 如何偽裝python腳本

爬蟲對應的請求載體身份標識偽裝成某一款瀏覽器。
在使用python爬取網站信息時,查看爬取完後的數據發現,數據並沒有被爬取下來,這是因為網站中有UA這種請求載體的身份標識,如果不是基於某一款瀏覽器爬取則是不正常的請求,所以會爬取失敗。讓爬蟲對應的請求載體身份標識偽裝成某一款瀏覽器,如採用偽裝成Chrome瀏覽器就好了。

㈡ python模擬瀏覽器的問題

是編碼問題吧?
保存的時候試一下 encoding="utf-8"
或者打開的時候試一下。

㈢ python有庫能實現模擬操作瀏覽器么

模擬瀏覽器的方法其實就是把一個人每天到目的網站上復制黏貼目的數據的過程用程序和機器實現,這過程為:用瀏覽器打開網站→輸入信息和提交等動作→瀏覽器請求相關網頁→瀏覽器渲染返回信息→人把渲染出來的信息復制黏貼保存系下來.

㈣ python爬蟲偽裝瀏覽器發送獲取不到信息,反而去掉偽裝就獲取到了

不要使用self.header,可以輸出一下self.header看看是否在調用正確,望採納

㈤ 如何用Python開發一個簡單的Webkit瀏覽器

在這篇教程中,我們會用 Python 的 PyQt 框架編寫一個簡單的 web 瀏覽器。關於 PyQt ,你可能已經有所耳聞了,它是 Qt 框架下的一系列 Python 組件,而 Qt(發音類似「cute」)是用來開發GUI的 C++ 框架。嚴格來講, Qt 也可用於開發不帶圖形界面的程序,但是開發用戶界面應該是 Qt 框架最為廣泛的應用了。Qt 的主要優勢是可以開發跨平台的圖形界面程序,基於 Qt 的應用能夠藉助於各平台的原生性在不同類的設備上運行,而無須修改任何代碼庫。

Qt 附帶了webkit的介面,你可以直接使用 PyQt 來開發一個基於 webkit 的瀏覽器。

我們本次教程所開發的瀏覽器可以完成如下功能:

  • 載入用戶輸入的url

  • 顯示在渲染頁面過程中發起的所有請求

  • 允許用戶在頁面中執行自定義的 JavaScript 腳本

  • 牛刀小試

    讓我們從最簡單的 PyQt 的 Webkit 用例開始吧:輸入 url,打開窗口並在窗口中載入頁面。

    這個例子十分短小,連import語句和空行在內也只有 13 行代碼。

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

  • import sys

    from PyQt4.QtWebKit import QWebView

    from PyQt4.QtGui import QApplication

    from PyQt4.QtCore import QUrl

    app = QApplication(sys.argv)

    browser = QWebView()

    browser.load(QUrl(sys.argv[1]))

    browser.show()

    app.exec_()

  • 當你通過命令行將 url 傳給腳本時,程序會載入 url 並且在窗口中顯示載入完成的頁面。

    現在,看似你已經有一個「命令行瀏覽器」啦!至少比 python 的 requests 模塊強多了,甚至比Lynx還略高一籌,因為我們的瀏覽器還可以載入 JavaScript 腳本呢。但是目前為止還沒有跟 Lynx 拉開差距,因為在啟用瀏覽器的時候只能通過命令行傳入 url。那麼,必然需要通過某種方式把需要載入的 url 傳入瀏覽器。沒錯,就是地址欄!

    添加地址欄

    其實地址欄的實現非常簡單,我們只需要在窗口頂端加一個輸入框就夠了。用戶在文本框中輸入 url 之後,瀏覽器就會載入這個地址。下面,我們將用到 QLineEdit 控制項來實現輸入框。鑒於我們的瀏覽器現在有地址欄和瀏覽器顯示框兩部分,因此還要給我們的應用增加一個網格布局。

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

  • import sys

    from PyQt4.QtGui import QApplication

    from PyQt4.QtCore import QUrl

    from PyQt4.QtWebKit import QWebView

    from PyQt4.QtGui import QGridLayout, QLineEdit, QWidget

    class UrlInput(QLineEdit):

    def __init__(self, browser):

    super(UrlInput, self).__init__()

    self.browser = browser

    # add event listener on "enter" pressed

    self.returnPressed.connect(self._return_pressed)

    def _return_pressed(self):

    url = QUrl(self.text())

    # load url into browser frame

    browser.load(url)

    if __name__ == "__main__":

    app = QApplication(sys.argv)

    # create grid layout

    grid = QGridLayout()

    browser = QWebView()

    url_input = UrlInput(browser)

    # url_input at row 1 column 0 of our grid

    grid.addWidget(url_input, 1, 0)

    # browser frame at row 2 column 0 of our grid

    grid.addWidget(browser, 2, 0)

    # main app window

    main_frame = QWidget()

    main_frame.setLayout(grid)

    main_frame.show()

    # close app when user closes window

    sys.exit(app.exec_())

  • 到這里,我們已經有一個瀏覽器的雛形啦!看上去和當年的 Google Chrome 還有幾分相像呢,畢竟兩者採用了相同的渲染引擎。現在,你可以在輸入框中輸入 url ,程序便會將地址傳入瀏覽器,接著渲染出所有的 HTML 頁面和 JavaScript 腳本並展示出來。

    添加開發工具

    一個瀏覽器最有趣也最重要的部分是什麼?當然是各種各樣的開發工具了!一個沒有開發者控制台的瀏覽器怎麼能算是瀏覽器呢?所以,我們的 Python 瀏覽器當然也要有一些開發者工具才行。

    現在,我們就來添加一些類似於 Chrome 的開發者工具中 「Network」 標簽的功能吧!這個功能就是簡單地追蹤瀏覽器引擎在載入頁面的時候所執行的所有請求。在瀏覽器主頁面的下方,我們將通過一個表來顯示這些請求。簡單起見,我們只會記錄登錄的 url、返回的狀態碼和響應的內容類型。

    首先我們要通過 QTableWidget 組件創建一個表格,表頭包括需要存儲的欄位名稱,表格可以根據每次新插入的記錄來自動調整大小。

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

  • class RequestsTable(QTableWidget):

    header = ["url", "status", "content-type"]

    def __init__(self):

    super(RequestsTable, self).__init__()

    self.setColumnCount(3)

    self.setHorizontalHeaderLabels(self.header)

    header = self.horizontalHeader()

    header.setStretchLastSection(True)

    header.setResizeMode(QHeaderView.ResizeToContents)

    def update(self, data):

    last_row = self.rowCount()

    next_row = last_row + 1

    self.setRowCount(next_row)

    for col, dat in enumerate(data, 0):

    if not dat:

    continue

    self.setItem(last_row, col, QTableWidgetItem(dat))

  • 想要追蹤所有請求的話,我們還需要對 PyQt 的內部構件有更深入的了解。了解到,Qt 提供了一個 NetworkAccessManager類作為 API 介面,通過調用它可以監控應用載入頁面時所執行的請求。我們需要自己編寫一個繼承自 NetworkAccessManager 的子類,添加必要的事件監聽器,然後使用我們自己編寫的 manager 來通知 webkit 視圖執行相應的請求。

    首先我們需要以 NetworkAccessManager 為基類創建我們自己的網路訪問管理器。

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

  • class Manager(QNetworkAccessManager):

    def __init__(self, table):

    QNetworkAccessManager.__init__(self)

    # add event listener on "load finished" event

    self.finished.connect(self._finished)

    self.table = table

    def _finished(self, reply):

    """Update table with headers, status code and url.

    """

    headers = reply.rawHeaderPairs()

    headers = {str(k):str(v) for k,v in headers}

    content_type = headers.get("Content-Type")

    url = reply.url().toString()

    # getting status is bit of a pain

    status = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute)

    status, ok = status.toInt()

    self.table.update([url, str(status), content_type])

  • 在這里需要提醒大家的是, Qt 的某些實現並不像想像中那麼簡單明了,比如說從響應中獲取狀態碼就十分繁瑣。首先,你得把請求對象的類屬性作為參數傳入 response 的方法.attribute()中,.attribute()方法的返回值是 QVariant 類型而非 int 類型。接著,需要調用內置函數.toInt()將其轉換成一個包含兩個元素的元組,最終得到響應的狀態碼。

    現在,我們終於有了一個記錄請求的表和一個監控網路的 manager,接下來只要把他們聚攏起來就可以了。

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

  • if __name__ == "__main__":

    app = QApplication(sys.argv)

    grid = QGridLayout()

    browser = QWebView()

    url_input = UrlInput(browser)

    requests_table = RequestsTable()

    manager = Manager(requests_table)

    # to tell browser to use network access manager

    # you need to create instance of QWebPage

    page = QWebPage()

    page.setNetworkAccessManager(manager)

    browser.setPage(page)

    grid.addWidget(url_input, 1, 0)

    grid.addWidget(browser, 2, 0)

    grid.addWidget(requests_table, 3, 0)

    main_frame = QWidget()

    main_frame.setLayout(grid)

    main_frame.show()

    sys.exit(app.exec_())

  • 現在,運行瀏覽器程序,在地址欄鍵入 url,就可以看到在主頁面下方的記錄表中記錄下的所有請求。

    如果你有興趣的話,還可以為瀏覽器添加很多新的功能:

  • 通過content-type添加篩選功能

  • 添加記錄表的排序功能

  • 添加計時器

  • 高亮顯示出錯的請求(比如說把錯誤信息置為紅色)

  • 顯示出更為具體的請求內容,比如說完整的頭信息、響應內容、請求方法等。

  • 增加一個重復發送請求並載入出來的選項。比如說用戶可以點擊在記錄表中的請求來重試請求。

  • 其實還有太多的功能可以繼續完善和改進,你可以一一嘗試一下,這會是一個非常有趣而且收獲良多的學習過程。但是如果想把這些功能都說完,估計都能寫一本書了。所以限於篇幅,本文就不一一介紹了,感興趣的朋友可以參考其他書籍和網上教程。

    增加解析自定義 JavaScript 腳本的功能

    我們終於迎來最後一個功能了!就是解析在頁面中包含的 JavaScript 腳本。

    基於我們之前已經打下的基礎,要完成這個功能非常簡單。我們只需要在添加一個 QLineEdit 組件,把它和頁面聯系起來,然後調用evaulateJavaScript方法就可以了。

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

  • class JavaScriptEvaluator(QLineEdit):

    def __init__(self, page):

    super(JavaScriptEvaluator, self).__init__()

    self.page = page

    self.returnPressed.connect(self._return_pressed)

    def _return_pressed(self):

    frame = self.page.currentFrame()

    result = frame.evaluateJavaScript(self.text())

  • 下面是這個功能的示例。看,我們的開發者工具已經整裝待發了!

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

  • if __name__ == "__main__":

    # ...

    # ...

    page = QWebPage()

    # ...

    js_eval = JavaScriptEvaluator(page)

    grid.addWidget(url_input, 1, 0)

    grid.addWidget(browser, 2, 0)

    grid.addWidget(requests_table, 3, 0)

    grid.addWidget(js_eval, 4, 0)

  • 現在唯一缺少的就是在頁面中不能執行 Python 腳本。你可以開發自己的瀏覽器,提供對 JavaScript 和 Python 的支持,這樣其他開發者就可以針對你的瀏覽器開發應用了。

    後退、前進和其他頁面操作

    我們在前面已經使用了 QWebPage 對象來開發瀏覽器,當然作為一個合格的瀏覽器,我們也需要為終端用戶提供一些重要功能。Qt 的網頁對象支持很多不同操作,我們可以把它們全都添加到瀏覽器中。

    現在我們可以先嘗試著添加「後退」、「前進」和「刷新」這幾個操作。你可以在界面上添加這些操作按鈕,簡單起見,這里只加一個文本框來執行這些動作。

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

  • class ActionInputBox(QLineEdit):

    def __init__(self, page):

    super(ActionInputBox, self).__init__()

    self.page = page

    self.returnPressed.connect(self._return_pressed)

    def _return_pressed(self):

    frame = self.page.currentFrame()

    action_string = str(self.text()).lower()

    if action_string == "b":

    self.page.triggerAction(QWebPage.Back)

    elif action_string == "f":

    self.page.triggerAction(QWebPage.Forward)

    elif action_string == "s":

    self.page.triggerAction(QWebPage.Stop)

  • 和之前一樣,我們要創建一個 ActionInputBox 的實例,把參數傳入頁面對象並把輸入框對象添加到頁面中。

    For reference here』s code for final result 示例代碼看這里

    [1]: Graphical User Interface,圖形用戶界面,又稱圖形用戶介面,是指採用圖形方式顯示的計算機操作用戶界面。

    [2]: WebKit是一個開源的瀏覽器引擎,與之相對應的引擎有 Gecko(Mozilla Firefox 等使用)和 Trident(也稱 MSHTML ,IE 使用)。

㈥ python爬蟲爬取的數據可以做什麼

爬蟲的概念是,爬取網上能看到的數據,也就是只要網上存在的,通過瀏覽器可以看到的數據。爬蟲都可以爬取。爬蟲爬取的原理就是偽裝成瀏覽器,然後進行爬取操作

哪些數據你需要你就可以爬取。比如爬取公司競爭對手的商業數據,爬取電影,音樂,圖片等等的。只要你希望得到的,前提瀏覽器可以訪問的都可以爬取

㈦ Python 以瀏覽器偽裝技術爬取CSDN首頁網站,查看網頁源代碼如圖所示,如何寫正則表達式

這個直接用BeautifulSoup解析取字元串就行,沒必要正則

㈧ python怎麼偽裝成瀏覽器訪問網站

把請求頭信息都弄上,然後把cookie也弄好
import urllib.request

url = "http://www.oschina.net/"
headers = ('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11')

opener = urllib.request.build_opener()
opener.addheaders = [headers]
data = opener.open(url).read()

print(data)

㈨ python爬蟲偽裝瀏覽器出現問題求助

聲明:以下代碼在Python 3.3中編寫調試完成!

首先我是這樣做的:

import urllib.request
url = "http://www.oschina.net/"
data = urllib.request.urlopen(url).read()
print(data)

結果發現不行,OSC加了保護,不止是OSC,CSDN等等很多網站都這樣,這就必須要偽裝瀏覽器正常訪問了,類似蜘蛛爬蟲一樣,那麼只有給代碼加上一個Header,再試試讀取HTML。

Chrome如何查看你的瀏覽器的Header:

一圖全解,有木有。

F12打開開發人員工具,其他瀏覽器也有類似功能,很方便哦,這里我們只需要Request Headers中的User-Agent就可以了。

各種糾結呀,網上許多代碼都是Python2的,我用的3.3,import很多都不一樣了,沒辦法只有翻Python的官方文檔,全英文有點苦,還好我的Chrome可以隨時翻譯,減輕負擔呀。

在官方文檔3.3中找到了urllib.request的文檔:docs.python.org/3/library/urllib.request.html

在Examples中找到了一個addheaders的方法,試了一下果然能行,下面就是代碼。

'''
Created on 2013-1-27
@author: isaced
'''
import urllib.request

url = "http://www.oschina.net/"
headers = ('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11')

opener = urllib.request.build_opener()
opener.addheaders = [headers]
data = opener.open(url).read()

print(data)

到這里就能輸出頁面的HTML了,也可以直接保存成本地HTML文件,打開正常。
另外對於這編碼問題還是有點迷茫。
另收藏一條很有用的語句,type(),類似於C語言中的typeof(),可以print出來直接查看數據類型,很方便!

㈩ Python爬蟲模擬登陸

你首先要了解登錄的過程是什麼
先要利用頭來模擬偽裝成瀏覽器訪問網站
post是把數據發送給網站後台,get就相反(一般是這種情況)
把post的數據也做成一樣的樣式
訪問網站,如果是200,則表示成功了

最後你可以使用bs4之類的,根據正則匹配獲取相關的數據或者下載保存到本地

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:594
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:889
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:583
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:766
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:685
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1014
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:257
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:115
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:807
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:714