python教程---網絡爬蟲

7.1 urllib

Urllib是Python內置的一個用于讀取來自Web的數據的庫。它是一個請求庫,可以用來發送HTTP請求,獲取網頁內容,支持多種HTTP方法,如GET和POST等。
使用Urllib讀取網頁內容的步驟如下:

  1. 導入Urllib庫中的request模塊。
import urllib.request
  1. 使用urlopen()函數發送HTTP請求,獲取網頁內容。
response = urllib.request.urlopen('http://www.example.com')
  1. 讀取獲取到的內容。可以使用read()、readline()和readlines()方法。
html = response.read()
  1. 對獲取到的內容進行解碼,以便得到字符串形式的內容。
html = html.decode('utf-8')
  1. 關閉響應對象。
response.close()

示例:

import urllib.request
url = 'http://www.example.com'
response = urllib.request.urlopen(url)
html = response.read()
html = html.decode('utf-8')
print(html)
response.close()

以上代碼使用Urllib讀取了http://www.example.com網站的內容,并將其打印出來。


7.2 正則表達式

正則表達式(Regular Expression,簡稱RegEx)是一種用于匹配字符串中字符組合的模式。在Python中,re模塊提供了正則表達式的支持。正則表達式在網絡爬蟲中常用于解析網頁內容,提取需要的數據。
使用正則表達式的基本步驟如下:

  1. 導入re模塊。
import re
  1. 編寫正則表達式模式。正則表達式的語法規則包括字符匹配、量詞、分組等。
  2. 使用re模塊提供的方法進行匹配。常見的方法有:
    • re.search(pattern, string): 在字符串中搜索模式,返回第一個匹配項的匹配對象。
    • re.match(pattern, string): 從字符串的起始位置匹配模式,返回匹配對象。
    • re.findall(pattern, string): 在字符串中找到所有匹配項,返回一個列表。
    • re.finditer(pattern, string): 在字符串中找到所有匹配項,返回一個迭代器。
    • re.sub(pattern, repl, string): 替換字符串中所有匹配的子串。
      示例:
import re
# 示例文本
text = "Hello, my phone number is 123-456-7890."
# 正則表達式模式,用于匹配電話號碼
pattern = r'\d{3}-\d{3}-\d{4}'
# 使用re.search()查找匹配項
match = re.search(pattern, text)
# 如果找到匹配項,則輸出
if match:print("Found phone number:", match.group())
else:print("No phone number found.")
# 使用re.findall()查找所有匹配項
phone_numbers = re.findall(pattern, text)
print("Phone numbers found:", phone_numbers)

輸出:

Found phone number: 123-456-7890
Phone numbers found: ['123-456-7890']

在這個例子中,我們使用正則表達式\d{3}-\d{3}-\d{4}來匹配格式為XXX-XXX-XXXX的電話號碼。re.search()用于找到第一個匹配項,而re.findall()用于找到所有匹配項。


7.3 Beautiful Soup
Beautiful Soup 是一個 Python 庫,用于從 HTML 或 XML 文件中提取數據。它可以幫助我們解析網頁內容,方便地提取出我們需要的數據。Beautiful Soup 與 lxml、html5lib 等解析器一起工作,提供了豐富的解析方法。
使用 Beautiful Soup 的基本步驟如下:

  1. 安裝 Beautiful Soup 庫。如果還沒有安裝,可以使用 pip 進行安裝:
pip install beautifulsoup4
  1. 導入 Beautiful Soup 模塊。
from bs4 import BeautifulSoup
  1. 加載 HTML 內容到 Beautiful Soup 對象。
soup = BeautifulSoup(html_content, 'html.parser')

其中 html_content 是你要解析的 HTML 內容,'html.parser' 是解析器,這里使用的是 Python 內置的 HTML 解析器。
4. 使用 Beautiful Soup 提供的方法提取數據。常見的方法有:

  • soup.find(): 查找第一個匹配的標簽。
  • soup.find_all(): 查找所有匹配的標簽。
  • soup.select(): 使用 CSS 選擇器查找標簽。
  • tag.get_text(): 獲取標簽內的文本內容。
    示例:
from bs4 import BeautifulSoup
# 示例 HTML 內容
html_content = """
<html>
<head>
<title>Example Web Page</title>
</head>
<body>
<h1>Welcome to Example Web Page</h1>
<p>This is a paragraph with some text.</p>
<ul><li>Item 1</li><li>Item 2</li><li>Item 3</li>
</ul>
</body>
</html>
"""
# 加載 HTML 內容到 Beautiful Soup 對象
soup = BeautifulSoup(html_content, 'html.parser')
# 提取標題文本
title = soup.find('title').get_text()
print("Title:", title)
# 提取所有的段落文本
paragraphs = soup.find_all('p')
for p in paragraphs:print("Paragraph:", p.get_text())
# 使用 CSS 選擇器提取無序列表中的所有列表項
list_items = soup.select('ul li')
for item in list_items:print("List item:", item.get_text())

輸出:

Title: Example Web Page
Paragraph: This is a paragraph with some text.
List item: Item 1
List item: Item 2
List item: Item 3

在這個例子中,我們使用 Beautiful Soup 來解析一個簡單的 HTML 頁面,提取了標題、段落文本以及無序列表中的列表項。Beautiful Soup 提供了豐富的 API 來方便地操作和提取網頁內容。


在Python中,網絡爬蟲是一種常見的任務,涉及多個庫和框架。對于您提到的目錄7.4,我們將重點討論lxml
lxml是一個用于處理XML和HTML的Python庫。它提供了非常快速和有效的解析方法,并且支持XPath和CSS選擇器,這對于提取和操作數據非常有用。lxml通常與requests庫一起使用,以獲取網頁內容并對其進行解析。
以下是如何使用lxml進行基本網頁解析的示例:

  1. 安裝lxml
    pip install lxml
    
  2. 使用lxml解析HTML
    from lxml import html
    import requests
    # 獲取網頁內容
    page = requests.get('http://example.com')
    # 解析網頁內容
    tree = html.fromstring(page.content)
    # 使用XPath找到元素
    titles = tree.xpath('//h2/text()')
    for title in titles:print(title)
    
  3. 提取屬性和更復雜的數據
    # 假設我們要提取所有鏈接和它們的文本
    links = tree.xpath('//a')
    for link in links:href = link.get('href')text = link.textprint(f'Text: {text}, Link: {href}')
    

lxml提供了非常強大的解析能力,可以處理復雜的HTML結構,并且相對較快。這對于需要從網頁中提取特定信息的網絡爬蟲來說非常有用。
需要注意的是,使用網絡爬蟲時,應始終遵守目標網站的robots.txt文件規定,并尊重網站的使用條款。同時,合理控制訪問頻率,避免對目標網站服務器造成不必要的負擔。在處理數據時,也應當遵守相關法律法規,尊重數據隱私和版權。


目錄7.5提到的是requests庫,這是一個非常流行的Python庫,用于發送HTTP請求。它簡單易用,同時功能強大,支持多種HTTP方法,如GET、POST、PUT、DELETE等,以及各種高級功能,如HTTP會話、cookie持久化、SSL驗證等。
以下是使用requests庫進行基本HTTP請求的示例:

  1. 安裝requests
    pip install requests
    
  2. 發送GET請求
    import requests
    # 發送GET請求
    response = requests.get('https://www.example.com')
    # 檢查請求是否成功
    if response.status_code == 200:print('Success!')
    else:print('An error has occurred.')
    # 輸出響應的文本內容
    print(response.text)
    
  3. 發送POST請求
    # 發送POST請求
    payload = {'key1': 'value1', 'key2': 'value2'}
    response = requests.post('https://www.example.com/post', data=payload)
    # 檢查響應狀態碼
    print(response.status_code)
    # 輸出響應的文本內容
    print(response.text)
    
  4. 處理響應頭和cookie
    # 獲取響應頭
    print(response.headers)
    # 獲取特定的響應頭
    print(response.headers.get('Content-Type'))
    # 獲取cookie
    print(response.cookies)
    
  5. 使用Session對象
    # 創建一個session對象
    session = requests.Session()
    # 使用session發送請求,它會自動處理cookie
    session.get('https://www.example.com')
    response = session.post('https://www.example.com/login', data={'user': 'username', 'pass': 'password'})
    # 檢查是否登錄成功
    print(response.text)
    

requests庫是進行網絡爬蟲時不可或缺的工具,它簡化了HTTP請求的發送和響應的處理,使得開發者可以專注于數據的抓取和處理。在使用requests庫時,應當遵循網站的使用條款,合理使用網絡資源,并尊重數據隱私和版權。


目錄7.6提到的是Selenium,這是一個自動化測試工具,它允許你編寫腳本來模擬用戶在網頁上的行為。Selenium支持多種瀏覽器,包括Chrome、Firefox、Safari等,并且可以運行在多種操作系統上。對于網絡爬蟲來說,Selenium特別有用,因為它可以處理JavaScript渲染的頁面,執行復雜的用戶交互,以及繞過一些反爬蟲機制。
以下是使用Selenium進行基本網頁自動化操作的示例:

  1. 安裝Selenium
    pip install selenium
    
  2. 下載對應的WebDriver
    你需要下載與你的瀏覽器相對應的WebDriver。例如,如果你使用的是Chrome,你需要下載ChromeDriver。
  3. 使用Selenium打開網頁
    from selenium import webdriver
    # 設置WebDriver的路徑
    driver_path = 'path/to/your/webdriver'
    # 創建WebDriver實例
    driver = webdriver.Chrome(driver_path)
    # 打開網頁
    driver.get('https://www.example.com')
    # 獲取頁面標題
    print(driver.title)
    # 關閉瀏覽器
    driver.quit()
    
  4. 執行用戶交互
    # 找到元素
    search_box = driver.find_element_by_name('q')
    # 輸入搜索關鍵詞
    search_box.send_keys('Python')
    # 提交表單
    search_box.submit()
    
  5. 處理JavaScript渲染的頁面
    # 等待頁面加載完成
    driver.implicitly_wait(10)
    # 獲取頁面源代碼
    page_source = driver.page_source
    # 使用BeautifulSoup或lxml解析頁面源代碼
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(page_source, 'html.parser')
    
  6. 模擬登錄
    # 找到用戶名和密碼輸入框
    username_box = driver.find_element_by_name('username')
    password_box = driver.find_element_by_name('password')
    # 輸入用戶名和密碼
    username_box.send_keys('your_username')
    password_box.send_keys('your_password')
    # 點擊登錄按鈕
    login_button = driver.find_element_by_id('login-btn')
    login_button.click()
    

Selenium是一個非常強大的工具,但它也有一定的缺點,比如運行速度較慢,需要下載和配置WebDriver,以及對于大規模抓取可能會有性能問題。盡管如此,對于需要模擬用戶行為的復雜網絡爬蟲任務,Selenium是一個非常有用的選擇。


目錄7.7提到的是Scrapy框架,這是一個非常強大的Python爬蟲框架,用于構建高效、異步的網絡爬蟲。Scrapy提供了完整的爬蟲解決方案,包括請求調度、自動抓取、數據提取、持久化存儲等功能。它還支持多種類型的數據輸出,如JSON、CSV、XML等,并且可以與許多其他Python庫和工具集成。
以下是使用Scrapy創建一個基本的爬蟲項目的步驟:

  1. 安裝Scrapy框架
    pip install scrapy
    
  2. 創建一個新的Scrapy項目
    scrapy startproject myspider
    
    這將創建一個名為myspider的新目錄,其中包含Scrapy項目的初始結構。
  3. 定義Item
    items.py文件中定義你要抓取的數據結構。
    import scrapy
    class MyItem(scrapy.Item):title = scrapy.Field()link = scrapy.Field()content = scrapy.Field()
    
  4. 編寫爬蟲
    spiders目錄下創建一個新的爬蟲文件,例如my_spider.py
    import scrapy
    from myspider.items import MyItem
    class MySpider(scrapy.Spider):name = 'my_spider'start_urls = ['https://www.example.com']def parse(self, response):item = MyItem()item['title'] = response.css('h1::text').get()item['link'] = response.urlitem['content'] = response.css('p::text').getall()yield item
    
  5. 運行爬蟲
    在項目根目錄下運行以下命令:
    scrapy crawl my_spider
    
    這將啟動爬蟲,并根據定義的parse方法處理每個響應。
  6. 存儲數據
    你可以使用Scrapy的內置功能將數據存儲為不同的格式。例如,要將數據輸出為JSON,可以使用以下命令:
    scrapy crawl my_spider -o output.json
    

Scrapy是一個高度可擴展的框架,它支持中間件、管道等多種方式來自定義爬蟲的行為。它還內置了強大的選擇器(基于lxml),可以方便地提取和操作數據。Scrapy的異步處理能力使其非常適合大規模的網絡爬取任務。在使用Scrapy時,應當遵守網站的使用條款,合理使用網絡資源,并尊重數據隱私和版權。


目錄7.8提到的是pyspider框架,這是一個強大的爬蟲框架,它提供了一個可視化的Web界面,允許用戶編寫爬蟲腳本,并調度任務。pyspider支持多種數據庫后端,如MySQL、MongoDB、SQLite等,并且可以處理JavaScript渲染的頁面。
以下是使用pyspider創建一個基本的爬蟲項目的步驟:

  1. 安裝pyspider
    pip install pyspider
    
  2. 啟動pyspider
    pyspider
    
    這將啟動pyspider的服務器,并默認在5000端口上運行。
  3. 訪問Web界面
    打開瀏覽器,訪問http://localhost:5000/,你將看到pyspider的管理界面。
  4. 創建一個新的爬蟲
    在Web界面中,點擊"Create"按鈕,創建一個新的爬蟲。你可以選擇"Prototype"來快速開始。
  5. 編寫爬蟲腳本
    在腳本編輯器中,編寫你的爬蟲代碼。以下是一個簡單的示例:
    from pyspider.libs.base_handler import *
    class Handler(BaseHandler):crawl_config = {}@every(minutes=24 * 60)def on_start(self):self.crawl('https://www.example.com', callback=self.index_page)@config(age=10 * 24 * 60 * 60)def index_page(self, response):for each in response.doc('a[href^="http"]').items():self.crawl(each.attr.href, callback=self.detail_page)def detail_page(self, response):return {"url": response.url,"title": response.doc('title').text(),}
    
  6. 運行爬蟲
    在腳本編輯器中,點擊"Run"按鈕,測試你的爬蟲腳本。如果一切正常,你可以點擊"Run"旁邊的"Save"按鈕保存腳本。
  7. 調度任務
    pyspider的管理界面,你可以看到你創建的爬蟲。點擊"Run"按鈕開始爬取數據。
    pyspider提供了一個靈活的框架,可以處理各種復雜的爬蟲任務。它的Web界面使得編寫、調試和運行爬蟲變得更加方便。在使用pyspider時,應當遵守網站的使用條款,合理使用網絡資源,并尊重數據隱私和版權。

7.9驗證碼處理

  1. 使用圖像識別庫
    Python中有一些圖像識別庫可以幫助處理簡單的驗證碼,例如pytesseract,它是Google的Tesseract-OCR引擎的Python封裝。
    from PIL import Image
    import pytesseract
    # 安裝Tesseract-OCR引擎
    # https://github.com/tesseract-ocr/tesseract
    # 打開驗證碼圖片
    image = Image.open('captcha.png')
    # 使用pytesseract識別圖像中的文字
    text = pytesseract.image_to_string(image, config='--psm 8')
    print(text)
    
  2. 使用專門的驗證碼識別服務
    有些服務專門提供驗證碼識別功能,如2Captcha、Anti-Captcha等。這些服務通常需要付費,但它們可以處理更復雜的驗證碼。
    import requests
    # 使用2Captcha服務的示例
    url = 'http://2captcha.com/in.php'
    api_key = 'your_api_key'
    captcha_id = 'captcha_image_id'
    # 發送驗證碼圖片到服務
    response = requests.post(url, data={'key': api_key, 'method': 'post', 'json': 1, 'body': captcha_id})
    # 解析響應獲取驗證碼ID
    captcha_id = response.json()['captcha_id']
    # 檢查驗證碼是否已經解決
    # ...
    # 使用驗證碼解決方案
    # ...
    
  3. 手動輸入驗證碼
    對于一些簡單的驗證碼,如果自動化處理的成本過高,可以考慮手動輸入驗證碼。這種方法通常用于測試或偶爾的爬蟲任務。
  4. 繞過驗證碼
    有些情況下,可以通過分析網站的驗證碼機制來找到繞過驗證碼的方法。例如,如果驗證碼是為了防止自動化腳本而設置的,但同時又提供了API接口,可以考慮使用API來進行數據抓取。
    處理驗證碼是一個復雜且不斷變化的過程,因為驗證碼的目的是防止自動化工具,所以它們會不斷進化變得更加難以被自動化腳本識別。在處理驗證碼時,應當遵守法律法規,不得用于非法目的。同時,應當尊重網站的合法權益,避免對網站的正常運營造成影響。

7.10動態渲染網頁爬取

  1. 使用Selenium
    Selenium是一個自動化測試工具,它可以模擬用戶的瀏覽器行為,包括執行JavaScript。使用Selenium可以獲取動態渲染后的網頁內容。
    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get('https://www.example.com')
    html = driver.page_source
    driver.quit()
    # 然后可以使用BeautifulSoup或lxml解析html內容
    
  2. 使用Pyppeteer
    Pyppeteer是一個Python庫,它是puppeteer(一個Node庫)的端口,用于控制無頭版的Chrome或Chromium。Pyppeteer可以用于爬取動態渲染的網頁。
    import pyppeteer
    async def main():browser = await pyppeteer.launch()page = await browser.newPage()await page.goto('https://www.example.com')html = await page.content()await browser.close()
    # 運行異步函數
    pyppeteer.asyncio.run(main())
    # 然后可以使用BeautifulSoup或lxml解析html內容
    
  3. 使用requests-html
    requests-html是一個Python庫,它結合了requestsPyppeteer的功能,提供了一個簡單的API來爬取JavaScript渲染的網頁。
    from requests_html import HTMLSession
    session = HTMLSession()
    response = session.get('https://www.example.com')
    response.html.render()
    # response.html包含了動態渲染后的內容
    
  4. 使用Ajax分析
    對于一些使用Ajax加載內容的網頁,可以分析Ajax請求,直接獲取JSON格式的數據,這樣可以避免處理JavaScript和渲染過程。
    import requests
    # 分析網頁,找到Ajax請求的URL
    ajax_url = 'https://www.example.com/api/data'
    # 發送請求獲取數據
    response = requests.get(ajax_url)
    data = response.json()
    

在爬取動態渲染網頁時,應當注意遵守網站的使用條款,合理使用網絡資源,并尊重數據隱私和版權。同時,由于動態渲染的網頁可能涉及更多的數據交互和用戶行為模擬,因此爬蟲的復雜度和資源消耗可能會更高。

7.11模擬登錄

  1. 使用requests庫模擬登錄
    import requests
    # 登錄URL
    login_url = 'https://www.example.com/login'
    # 用戶名和密碼
    payload = {'username': 'your_username', 'password': 'your_password'}
    # 創建一個session對象,它會自動處理cookie
    session = requests.Session()
    # 發送POST請求進行登錄
    response = session.post(login_url, data=payload)
    # 檢查是否登錄成功
    if response.ok:print('Login successful!')
    else:print('Login failed!')
    # 然后可以使用session對象進行其他需要登錄的操作
    
  2. 使用Selenium模擬登錄
    from selenium import webdriver
    # 創建WebDriver實例
    driver = webdriver.Chrome()
    # 打開登錄頁面
    driver.get('https://www.example.com/login')
    # 找到用戶名和密碼輸入框
    username_box = driver.find_element_by_name('username')
    password_box = driver.find_element_by_name('password')
    # 輸入用戶名和密碼
    username_box.send_keys('your_username')
    password_box.send_keys('your_password')
    # 點擊登錄按鈕
    login_button = driver.find_element_by_id('login-btn')
    login_button.click()
    # 等待頁面跳轉或加載完成
    driver.implicitly_wait(10)
    # 然后可以使用driver對象進行其他需要登錄的操作
    
  3. 處理驗證碼
    如果登錄過程中包含驗證碼,你可能需要手動輸入驗證碼,或者使用圖像識別服務自動識別驗證碼。
  4. 處理cookie
    在登錄后,通常需要保存cookie以便于后續請求使用。使用requests庫的session對象或Seleniumdriver對象可以自動處理cookie。
  5. 處理安全問題
    有些網站可能會在登錄過程中加入額外的安全措施,如二次驗證、安全問題等。這些情況可能需要特殊處理,例如使用短信驗證碼、郵件驗證碼或回答安全問題。
    模擬登錄時,應當遵守網站的使用條款,不得用于非法目的。同時,應當尊重網站的合法權益,避免對網站的正常運營造成影響。在進行大規模數據抓取時,應當考慮到服務器負載,合理控制請求頻率。

7.12 autoscraper

以下是使用autoscraper的基本步驟:

  1. 安裝autoscraper
    pip install autoscraper
    
  2. 創建一個AutoScraper實例
    from autoscraper import AutoScraper
    # 初始化AutoScraper
    scraper = AutoScraper()
    
  3. 提供示例數據和URL
    # 示例URL和數據
    url = 'https://www.example.com/products'
    example_data = {'product_name': 'Example Product', 'price': '$19.99'}
    # fit方法用于提供示例數據和URL
    scraper.fit(url, example_data)
    
  4. 使用get_data方法提取數據
    # 現在可以提取同一頁面上其他產品的數據
    products_url = 'https://www.example.com/products'
    data = scraper.get_data(products_url)
    for product in data:print(product)
    
  5. 處理多個頁面
    # 如果需要處理多個頁面,可以繼續調用get_data
    another_page_url = 'https://www.example.com/products/page/2'
    more_data = scraper.get_data(another_page_url)
    for product in more_data:print(product)
    

autoscraper的強大之處在于它的易用性和自動學習提取規則的能力。然而,它可能不適用于所有復雜的網頁結構或需要高度定制化的數據提取任務。在使用autoscraper時,應當遵守網站的使用條款,合理使用網絡資源,并尊重數據隱私和版權。同時,考慮到autoscraper的學習性質,可能需要用戶提供足夠的示例數據以確保準確的數據提取。

參考網址


7.13 selectolax

以下是使用selectolax的基本步驟:

  1. 安裝selectolax
    pip install selectolax
    
  2. 解析HTML文檔
    from selectolax.parser import HTMLParser
    # 從字符串解析HTML
    html = '<html><body><div class="example">Text</div></body></html>'
    parser = HTMLParser(html)
    # 或者從URL加載HTML
    # parser = HTMLParser.from_url('https://www.example.com')
    
  3. 使用CSS選擇器查找元素
    # 使用CSS選擇器查找元素
    div = parser.css_first('div.example')
    if div is not None:print(div.text())  # 輸出: Text
    
  4. 遍歷所有匹配的元素
    # 遍歷所有匹配的元素
    for div in parser.css('div.example'):print(div.text())
    
  5. 修改元素和屬性
    # 修改元素文本
    div.set_text('New text')
    # 修改元素屬性
    div.set_attribute('class', 'new-class')
    # 獲取修改后的HTML
    modified_html = parser.html()
    

selectolax的優勢在于它的速度和靈活性。它支持CSS選擇器,這使得從HTML文檔中提取數據變得非常方便。此外,selectolax還允許修改文檔結構,這在某些爬蟲任務中可能很有用。在使用selectolax時,應當遵守網站的使用條款,合理使用網絡資源,并尊重數據隱私和版權。


7.14 requests-html

以下是使用requests-html的基本步驟:

  1. 安裝requests-html
    pip install requests-html
    
  2. 發送請求并獲取響應
    from requests_html import HTMLSession
    # 創建一個HTMLSession對象
    session = HTMLSession()
    # 發送GET請求
    response = session.get('https://www.example.com')
    # 查看響應內容
    print(response.text)
    
  3. 處理JavaScript渲染的頁面
    requests-html會自動處理JavaScript渲染的頁面。如果你需要確保頁面完全加載,可以使用response.html.render()方法。
    # 等待頁面完全加載
    response.html.render()
    # 再次查看響應內容,此時應該包含動態加載的內容
    print(response.text)
    
  4. 使用CSS選擇器提取數據
    requests-html提供了一個類似于BeautifulSoup的API來操作HTML元素。
    # 使用CSS選擇器提取數據
    title = response.html.find('h1')[0].text
    print(title)
    
  5. 處理JavaScript交互
    requests-html還支持一些JavaScript交互,如執行JavaScript代碼或處理JavaScript事件。
    # 執行JavaScript代碼
    response.html.eval('console.log("Hello, world!")')
    # 處理JavaScript事件
    response.html.handle_event('click', 'button#my-button')
    

requests-html是一個強大的工具,尤其適合于需要處理JavaScript渲染頁面的網絡爬蟲任務。然而,它可能不適合所有情況,特別是對于復雜的交互式網頁或需要高度定制化的爬蟲任務。在使用requests-html時,應當遵守網站的使用條款,合理使用網絡資源,并尊重數據隱私和版權。同時,考慮到requests-html的JavaScript執行能力,可能需要更多的資源來處理頁面,因此在大規模抓取時應當考慮到服務器負載。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/38386.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38386.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/38386.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis--18--Redis Desktop Manage下載與安裝

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 Redis Desktop Manage1.官網下載https://redis.io/insight/ 2.安裝方法3.使用方法3.1.進入RedisDesktopManager的主界面3.2 新建連接3.3 支持操作 Redis Desktop Ma…

J021_QQ號格式校驗

一、需求描述 校驗QQ號碼是否正確。要求全部是數字&#xff0c;數字長度&#xff08;6-20位之間&#xff09;&#xff0c;不能以0開頭。 二、代碼實現 package com.itheima.sort;public class Test {public static void main(String[] args) {System.out.println("----…

汽車尾燈(轉向燈)電路設計

即當汽車進行轉彎時,司機打開轉向燈,尾燈會根據轉向依次被點亮,經過一定的間隔后,再全部被消滅。不停地重復,直到司機關閉轉向燈。 該效果可由以下電路實現: 完整電路圖: 02—電路設計要點 延時電路的要點主要有兩個: 一、當轉向開關被按下時,LED需要逐個亮起; 二、LED被逐…

uniapp 使用cavans 生成海報

uniapp 使用cavans 生成海報 npm install qs-canvas1.創建 useCanvas.js /*** Shopro qs-canvas 繪制海報* version 1.0.0* author lidongtony* param {Object} options - 海報參數* param {Object} vm - 自定義組件實例*/ import QSCanvas from qs-canvas; import { getPos…

NVIDIA Visual Profiler啟動失敗報錯

在銀河麒麟V10安裝完NVIDIA后&#xff0c;想著試著運行一下NVIDIA Visual Profiler&#xff0c;發現報錯&#xff0c;如下圖。 照著提示翻閱日志文件。看見其中寫著 !ENTRY com.nvidia.viper.birt 2 0 2024-06-30 08:39:39.806 !MESSAGE Could not resolve module: com.nvidi…

ACE之Task框架

簡介 其提供了并發處理事件的能力 結構 #mermaid-svg-8gxc0Agd7gZ9tHdf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8gxc0Agd7gZ9tHdf .error-icon{fill:#552222;}#mermaid-svg-8gxc0Agd7gZ9tHdf .error-text{…

R學習資源及R包安裝

轉自生信師兄 生信必備技巧之R語言基礎教程 1. 學習資源 推薦書籍&#xff1a;R語言實戰&#xff0c;R數據科學等等&#xff1b; 這兩本書在公眾號【生信師兄】都有pdf版&#xff0c;有需要的可以關注公眾號【生信師兄】并回復&#xff1a;“R語言”&#xff0c;即可獲得免費…

【自然語言處理】預訓練語言模型實現與應用

預訓練語言模型實現與應用 1 任務目標 1.1 案例簡介 ? 2018年&#xff0c;Google提出了預訓練語言模型BERT&#xff0c;該模型在各種NLP任務上都取得了很好的效果。與此同時&#xff0c;它的使用十分方便&#xff0c;可以快速地對于各種NLP任務進行適配。因此&#xff0c;B…

《每天5分鐘用Flask搭建一個管理系統》第8章:權限管理

第8章&#xff1a;權限管理 8.1 權限管理的概念 權限管理是控制用戶對應用內不同資源訪問的機制。它確保用戶只能訪問他們被授權的資源。 8.2 Flask-Principal擴展的使用 Flask-Principal是一個提供權限管理功能的Flask擴展&#xff0c;它允許您定義角色和權限&#xff0c;…

基于HarmonyOS NEXT開發智能提醒助手

目錄 目錄 目錄 前言 關于HarmonyOS NEXT 智能提醒助手需求分析 智能提醒助手設計 1、系統架構 2、功能模塊 智能提醒助手的應用場景 智能提醒助手的競爭力 具體技術實現 未來展望 結束語 前言 隨著智能設備的普及和物聯網技術的飛速發展&#xff0c;人們對于智能…

基于大津閾值法和二值化與聯通區域標記進行圖像目標計數

1 建模 A.讀取圖像&#xff1a; 1.使用imread函數讀取圖像文件。 2.如果圖像是彩色的&#xff0c;通常需要先轉換為灰度圖像&#xff0c;因為大津閾值法通常應用于灰度圖像。 B.灰度化&#xff1a; 1&#xff0e;如果圖像是彩色的&#xff0c;使用rgb2gray函數將其轉換為灰度…

《昇思25天學習打卡營第16天 | 昇思MindSpore基于MobileNetv2的垃圾分類》

16天 本節學習了垃圾分類代碼開發的方法。通過讀取本地圖像數據作為輸入&#xff0c;對圖像中的垃圾物體進行檢測&#xff0c;并且將檢測結果圖片保存到文件中。 MobileNet網絡是由Google團隊于2017年提出的專注于移動端、嵌入式或IoT設備的輕量級CNN網絡&#xff0c;相比于傳…

Excel顯示/隱藏批注按鈕為什么是灰色?

在excel中&#xff0c;經常使用批注來加強數據信息的提示&#xff0c;有時候會把很多的批注顯示出來&#xff0c;但是再想將它們隱藏起來&#xff0c;全選工作表后&#xff0c;“顯示/隱藏批注”按鈕是灰色的&#xff0c;不可用。 二、可操作方法 批注在excel、WPS表格中都是按…

【考研408計算機組成原理】微程序設計重要考點指令流水線考研真題+考點分析

蘇澤 “棄工從研”的路上很孤獨&#xff0c;于是我記下了些許筆記相伴&#xff0c;希望能夠幫助到大家 目錄 微指令的形成方式 微指令的地址形成方式 對應考題 題目&#xff1a;微指令的地址形成方式 - 斷定方式 解題思路&#xff1a; 答題&#xff1a; 分析考點&…

每日疑問,多線程場景,下面的代碼是否可以保證只執行一次

看著這個代碼的目的是只注冊一次sighandler&#xff0c;但是這個判定是否可以保證一次&#xff1f;但是根據代碼看&#xff0c;其實不會有關鍵區的讀寫&#xff0c;所以即使有同步問題&#xff0c;也不會產生什么特別的影響。所以代碼沒有問題&#xff0c;但是這是一個坑。 in…

Spring Boot中的分頁與排序實現

Spring Boot中的分頁與排序實現 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;在開發Web應用時&#xff0c;分頁和排序是常見的功能需求&#xff0c;特別是在處…

計算機體系結構和指令系統

1.計算機體系結構 - 五大部件 - 馮 諾依曼 計算機的特點 1.計算機有五大部件組成 2.指令和數據以同等地位存儲于存儲器&#xff0c;可按照地址訪問 3.指令和數據用二進制表示 4.指令由操作碼和地址碼組成 5。存儲程序 6.以計算器為中心&#xff08;輸入、輸出設備與存儲器…

2024年【湖北省安全員-C證】新版試題及湖北省安全員-C證試題及解析

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 湖北省安全員-C證新版試題參考答案及湖北省安全員-C證考試試題解析是安全生產模擬考試一點通題庫老師及湖北省安全員-C證操作證已考過的學員匯總&#xff0c;相對有效幫助湖北省安全員-C證試題及解析學員順利通過考試…

WIN10系統自帶錄屏軟件怎么用?

WIN10系統自帶錄屏軟件怎么用&#xff1f; WIN10系統錄屏軟件怎么用&#xff1f; 第一步&#xff1a;WING 快捷打開系統自帶錄屏軟件&#xff0c;如下&#xff1a; 第二步&#xff1a;點擊錄屏軟件區域“開始錄制”按鈕進入屏幕錄制狀態&#xff0c;如下&#xff1a; 第三步…

基于SpringBoot的財務管理系統

根據您提供的論文內容和模板要求&#xff0c;以下是定制化的文章輸出&#xff1a; 你好呀&#xff0c;我是計算機學姐碼農小野&#xff01;如果有相關需求&#xff0c;可以私信聯系我。 開發語言&#xff1a; Java 數據庫&#xff1a; MySQL 技術&#xff1a; SpringBoot…