最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文教你Python如何快速精準(zhǔn)抓取網(wǎng)頁數(shù)據(jù)

 更新時間:2025年04月30日 16:19:07   作者:Python_trys  
這篇文章主要為大家詳細(xì)介紹了如何利用Python實現(xiàn)快速精準(zhǔn)抓取網(wǎng)頁數(shù)據(jù),文中的示例代碼簡潔易懂,具有一定的借鑒價值,有需要的小伙伴可以了解下

本文將使用requests和BeautifulSoup這兩個流行的庫來實現(xiàn)。

1. 準(zhǔn)備工作

首先安裝必要的庫:

pip install requests beautifulsoup4

2. 基礎(chǔ)爬蟲實現(xiàn)

import requests
from bs4 import BeautifulSoup
import time
import random

def get_csdn_articles(keyword, pages=1):
    """
    抓取CSDN上指定關(guān)鍵詞的文章
    :param keyword: 搜索關(guān)鍵詞
    :param pages: 要抓取的頁數(shù)
    :return: 文章列表,包含標(biāo)題、鏈接、簡介等信息
    """
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }
    
    base_url = "https://so.csdn.net/so/search"
    articles = []
    
    for page in range(1, pages + 1):
        params = {
            'q': keyword,
            't': 'blog',
            'p': page
        }
        
        try:
            response = requests.get(base_url, headers=headers, params=params)
            response.raise_for_status()
            
            soup = BeautifulSoup(response.text, 'html.parser')
            items = soup.find_all('div', class_='search-item')
            
            for item in items:
                title_tag = item.find('a', class_='title')
                if not title_tag:
                    continue
                    
                title = title_tag.get_text().strip()
                link = title_tag['href']
                
                # 獲取簡介
                desc_tag = item.find('p', class_='content')
                description = desc_tag.get_text().strip() if desc_tag else '無簡介'
                
                # 獲取閱讀數(shù)和發(fā)布時間
                info_tags = item.find_all('span', class_='date')
                read_count = info_tags[0].get_text().strip() if len(info_tags) > 0 else '未知'
                publish_time = info_tags[1].get_text().strip() if len(info_tags) > 1 else '未知'
                
                articles.append({
                    'title': title,
                    'link': link,
                    'description': description,
                    'read_count': read_count,
                    'publish_time': publish_time
                })
            
            print(f"已抓取第 {page} 頁,共 {len(items)} 篇文章")
            
            # 隨機(jī)延遲,避免被封
            time.sleep(random.uniform(1, 3))
            
        except Exception as e:
            print(f"抓取第 {page} 頁時出錯: {e}")
            continue
    
    return articles

if __name__ == '__main__':
    # 示例:抓取關(guān)于"Python爬蟲"的前3頁文章
    keyword = "

3. 高級功能擴(kuò)展

3.1 抓取文章詳情

def get_article_detail(url):
    """抓取文章詳情內(nèi)容"""
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }
    
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()
        
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 獲取文章主體內(nèi)容
        content = soup.find('article')
        if content:
            # 清理不必要的標(biāo)簽
            for tag in content(['script', 'style', 'iframe', 'nav', 'footer']):
                tag.decompose()
            return content.get_text().strip()
        
        return "無法獲取文章內(nèi)容"
    except Exception as e:
        print(f"抓取文章詳情出錯: {e}")
        return None

3.2 保存數(shù)據(jù)到文件

import json
import csv

def save_to_json(data, filename):
    """保存數(shù)據(jù)到JSON文件"""
    with open(filename, 'w', encoding='utf-8') as f:
        json.dump(data, f, ensure_ascii=False, indent=2)

def save_to_csv(data, filename):
    """保存數(shù)據(jù)到CSV文件"""
    if not data:
        return
        
    keys = data[0].keys()
    
    with open(filename, 'w', newline='', encoding='utf-8') as f:
        writer = csv.DictWriter(f, fieldnames=keys)
        writer.writeheader()
        writer.writerows(data)

4. 完整示例

if __name__ == '__main__':
    # 抓取文章列表
    keyword = "Python爬蟲"
    articles = get_csdn_articles(keyword, pages=2)
    
    # 抓取前3篇文章的詳情
    for article in articles[:3]:
        article['content'] = get_article_detail(article['link'])
        time.sleep(random.uniform(1, 2))  # 延遲
    
    # 保存數(shù)據(jù)
    save_to_json(articles, 'csdn_articles.json')
    save_to_csv(articles, 'csdn_articles.csv')
    
    print("數(shù)據(jù)抓取完成并已保存!")

5. 反爬蟲策略應(yīng)對

1.設(shè)置請求頭:模擬瀏覽器訪問

2.隨機(jī)延遲:避免請求過于頻繁

3.使用代理IP:防止IP被封

4.處理驗證碼:可能需要人工干預(yù)

5.遵守robots.txt:尊重網(wǎng)站的爬蟲規(guī)則

到此這篇關(guān)于一文教你Python如何快速精準(zhǔn)抓取網(wǎng)頁數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Python抓取網(wǎng)頁數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 實現(xiàn)一個簡單的web服務(wù)器

    Python 實現(xiàn)一個簡單的web服務(wù)器

    這篇文章主要介紹了Python 實現(xiàn)一個簡單的web服務(wù)器的方法,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2021-01-01
  • Django如何實現(xiàn)內(nèi)容緩存示例詳解

    Django如何實現(xiàn)內(nèi)容緩存示例詳解

    緩存對于大家來說應(yīng)該都不陌生,下面這篇文章主要給大家介紹了關(guān)于Django如何實現(xiàn)內(nèi)容緩存的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-09-09
  • Python打印斐波拉契數(shù)列實例

    Python打印斐波拉契數(shù)列實例

    這篇文章主要介紹了Python打印斐波拉契數(shù)列的方法,實例分析了基于Python實現(xiàn)斐波那契數(shù)列的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 輕松掌握Python爬蟲,從入門到精通

    輕松掌握Python爬蟲,從入門到精通

    Python爬蟲學(xué)習(xí)完整版來了!想成為一名爬蟲高手,掌握數(shù)據(jù)采集的技能嗎?這份指南將帶你從零開始,一步步掌握Python爬蟲的各種技巧,讓你輕松獲取海量數(shù)據(jù),需要的朋友可以參考下
    2024-03-03
  • python?selenium實現(xiàn)登錄豆瓣示例詳解

    python?selenium實現(xiàn)登錄豆瓣示例詳解

    大家好,本篇文章主要講的是python?selenium登錄豆瓣示例詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • 最新PyCharm從安裝到PyCharm永久激活再到PyCharm官方中文漢化詳細(xì)教程

    最新PyCharm從安裝到PyCharm永久激活再到PyCharm官方中文漢化詳細(xì)教程

    這篇文章涵蓋了最新版PyCharm安裝教程,最新版PyCharm永久激活碼教程,PyCharm官方中文(漢化)版安裝教程圖文并茂非常詳細(xì),需要的朋友可以參考下
    2020-11-11
  • Python綁定方法與非綁定方法詳解

    Python綁定方法與非綁定方法詳解

    這篇文章主要為大家詳細(xì) 介紹了Python綁定方法與非綁定方法的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Python中關(guān)于集合的介紹與常規(guī)操作解析

    Python中關(guān)于集合的介紹與常規(guī)操作解析

    Python除了List、Tuple、Dict等常用數(shù)據(jù)類型外,還有一種數(shù)據(jù)類型叫做集合(set),集合的最大特點是:集合里邊的元素是不可重復(fù)的并且集合內(nèi)的元素還是無序的
    2021-09-09
  • 一文搞懂Python中pandas透視表pivot_table功能

    一文搞懂Python中pandas透視表pivot_table功能

    透視表是一種可以對數(shù)據(jù)動態(tài)排布并且分類匯總的表格格式。或許大多數(shù)人都在Excel使用過數(shù)據(jù)透視表,也體會到它的強(qiáng)大功能,而在pandas中它被稱作pivot_table,今天通過本文給大家介紹Python中pandas透視表pivot_table功能,感興趣的朋友一起看看吧
    2021-11-11
  • 對python多線程中Lock()與RLock()鎖詳解

    對python多線程中Lock()與RLock()鎖詳解

    今天小編就為大家分享一篇對python多線程中Lock()與RLock()鎖詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01

最新評論

开封市| 札达县| 报价| 松江区| 永顺县| 新泰市| 南木林县| 运城市| 西城区| 邮箱| 邻水| 陈巴尔虎旗| 麦盖提县| 建昌县| 陇南市| 隆安县| 巨鹿县| 巨野县| 元朗区| 奈曼旗| 柘城县| 高台县| 广德县| 阿拉尔市| 永嘉县| 荣昌县| 呼图壁县| 八宿县| 临沧市| 太白县| 普格县| 临朐县| 浑源县| 乌鲁木齐县| 泾源县| 攀枝花市| 永城市| 准格尔旗| 乌兰县| 临沭县| 军事|