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

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

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

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

1. 準(zhǔn)備工作

首先安裝必要的庫(kù):

pip install requests beautifulsoup4

2. 基礎(chǔ)爬蟲實(shí)現(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: 要抓取的頁(yè)數(shù)
    :return: 文章列表,包含標(biāo)題、鏈接、簡(jiǎn)介等信息
    """
    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']
                
                # 獲取簡(jiǎn)介
                desc_tag = item.find('p', class_='content')
                description = desc_tag.get_text().strip() if desc_tag else '無簡(jiǎn)介'
                
                # 獲取閱讀數(shù)和發(fā)布時(shí)間
                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} 頁(yè),共 {len(items)} 篇文章")
            
            # 隨機(jī)延遲,避免被封
            time.sleep(random.uniform(1, 3))
            
        except Exception as e:
            print(f"抓取第 {page} 頁(yè)時(shí)出錯(cuò): {e}")
            continue
    
    return articles

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

3. 高級(jí)功能擴(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"抓取文章詳情出錯(cuò): {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)對(duì)

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

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

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

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

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

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

相關(guān)文章

  • Python 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的web服務(wù)器

    Python 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的web服務(wù)器

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論

简阳市| 平湖市| 南投市| 揭阳市| 鄢陵县| 湘潭县| 社旗县| 仙游县| 淄博市| 九台市| 大连市| 拜城县| 航空| 海盐县| 三河市| 连城县| 英德市| 遵义县| 天等县| 田阳县| 东方市| 建德市| 新平| 温泉县| 和顺县| 陆川县| 土默特右旗| 荆门市| 神池县| 高要市| 嘉义县| 威海市| 临沧市| 潮安县| 循化| 建水县| 永丰县| 健康| 天水市| 陕西省| 中超|