国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

一條爬蟲抓取一個(gè)小網(wǎng)站所有數(shù)據(jù)

這篇具有很好參考價(jià)值的文章主要介紹了一條爬蟲抓取一個(gè)小網(wǎng)站所有數(shù)據(jù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一條爬蟲抓取一個(gè)小網(wǎng)站所有數(shù)據(jù)

? 今天閑來無事,寫一個(gè)爬蟲來玩玩。在網(wǎng)上沖浪的時(shí)候發(fā)現(xiàn)了一個(gè)搞笑的段子網(wǎng),發(fā)現(xiàn)里面的內(nèi)容還是比較有意思的,于是心血來潮,就想著能不能寫一個(gè)Python程序,抓取幾條數(shù)據(jù)下來看看,一不小心就把這個(gè)網(wǎng)站的所有數(shù)據(jù)都拿到了。

一條爬蟲抓取一個(gè)小網(wǎng)站所有數(shù)據(jù)

? 這個(gè)網(wǎng)站主要的數(shù)據(jù)都是詳情在HTML里面的,可以采用lxml模塊的xpath對(duì)HTML標(biāo)簽的內(nèi)容解析,獲取到自己想要的數(shù)據(jù),然后再保存在本地文件中,整個(gè)過程是一氣呵成的。能夠抓取到一頁的數(shù)據(jù)之后,加一個(gè)循環(huán)就可以抓取到所有頁的數(shù)據(jù),下面的就是數(shù)據(jù)展示。

一條爬蟲抓取一個(gè)小網(wǎng)站所有數(shù)據(jù)

廢話少說,直接上Python代碼

import requests
import csv
from lxml import etree
import time


class Page:

    def __init__(self):
        self.pre_url = "https://www.biedoul.com"
        self.start_page = 1
        self.end_page = 15233

    def askHTML(self, current_page, opportunity):
        print(
            "=============================== current page => " + str(current_page) + "===============================")
        try:

            pre_url = self.pre_url + "/index/" + str(current_page)
            page = requests.get(url=pre_url)
            html = etree.HTML(page.content)
            articles = html.xpath('/html/body/div/div/div/dl')
            return articles
        except Exception as e:
            if opportunity > 0:
                time.sleep(500)
                print(
                    "=============================== retry => " + str(opportunity) + "===============================")
                return self.askHTML(current_page, opportunity - 1)
            else:
                return None

    def analyze(self, articles):
        lines = []
        for article in articles:
            data = {}
            data["link"] = article.xpath("./span/dd/a/@href")[0]
            data["title"] = article.xpath("./span/dd/a/strong/text()")[0]
            data["content"] = self.analyze_content(article)
            picture_links = article.xpath("./dd/img/@src")
            if (picture_links is not None and len(picture_links) > 0):
                # print(picture_links)
                data["picture_links"] = picture_links
            else:
                data["picture_links"] = []

            # data["good_zan"] = article.xpath("./div/div/a[@class='pinattn good']/p/text()")[0]
            # data["bad_bs"] = article.xpath("./div/div/a[@class='pinattn bad']/p/text()")[0]
            data["good_zan"] = self.analyze_zan(article, "good")
            # article.xpath("./div/div/a[@class='pinattn good']/p/text()")[0]
            data["bad_bs"] = self.analyze_zan(article, "bad")
            # article.xpath("./div/div/a[@class='pinattn bad']/p/text()")[0]
            lines.append(data)
        return lines

    # 解析文章內(nèi)容
    def analyze_content(self, article):
        # 1. 判斷dd標(biāo)簽下是否為文本內(nèi)容
        content = article.xpath("./dd/text()")
        if content is not None and len(content) > 0 and not self.is_empty_list(content):
            return content

        content = []
        p_list = article.xpath("./dd")
        for p in p_list:
            # 2. 判斷dd/.../font標(biāo)簽下是否為文本內(nèi)容
            if len(content) <= 0 or content is None:
                fonts = p.xpath(".//font")
                for font_html in fonts:
                    font_content = font_html.xpath("./text()")
                    if font_content is not None and len(font_content) > 0:
                        content.append(font_content)

            # 3. 判斷dd/.../p標(biāo)簽下是否為文本內(nèi)容
            if len(content) <= 0 or content is None:
                fonts = p.xpath(".//p")
                for font_html in fonts:
                    font_content = font_html.xpath("./text()")
                    if font_content is not None and len(font_content) > 0:
                        content.append(font_content)

        return content

    def analyze_zan(self, article, type):
        num = article.xpath("./div/div/a[@class='pinattn " + type + "']/p/text()")
        if num is not None and len(num) > 0:
            return num[0]
        return 0

    def do_word(self):
        fieldnames = ['index', 'link', 'title', 'content', 'picture_links', 'good_zan', 'bad_bs']
        with open('article.csv', 'a', encoding='UTF8', newline='') as f:
            writer = csv.DictWriter(f, fieldnames=fieldnames)
            # writer.writeheader()
            for i in range(self.start_page, self.end_page):
                articles = self.askHTML(i, 3)
                if articles is None:
                    continue
                article_list = self.analyze(articles)
                self.save(writer, article_list)

    # 保存到文件中
    def save(self, writer, lines):
        print("##### 保存中到文件中...")
        # python2可以用file替代open
        print(lines)
        writer.writerows(lines)
        print("##### 保存成功...")

    def is_empty_list(self, list):
        for l in list:
            if not self.empty(l):
                return False
        return True

    def empty(self, content):
        result = content.replace("\r", "").replace("\n", "")
        if result == "":
            return True
        return False

    # 遞歸解析文章內(nèi)容
    def analyze_font_content(self, font_html, depth):
        content = []
        print(depth)
        font_content_list = font_html.xpath("./font/text()")
        if font_content_list is not None and len(font_content_list) > 0 and not self.is_empty_list(font_content_list):
            for font_content in font_content_list:
                content.append(font_content)
        else:
            if depth < 0:
                return []
            return self.analyze_font_content(font_html.xpath("./font"), depth - 1)

        return content


if __name__ == '__main__':
    page = Page()
    page.do_word()

在運(yùn)行下面的代碼之前,需要先按照好requests、lxml兩個(gè)模塊,安裝命令為:

pip installl requests
pip install lxml

大家對(duì)這個(gè)爬蟲有什么疑問,歡迎給我留言。如果大家對(duì)于我這個(gè)爬蟲創(chuàng)意還不錯(cuò)的話,記得關(guān)注微信公眾號(hào)【智享學(xué)習(xí)】喲,后續(xù)我會(huì)分享更多有意思的編程項(xiàng)目。

本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布!文章來源地址http://www.zghlxwxcb.cn/news/detail-703081.html

到了這里,關(guān)于一條爬蟲抓取一個(gè)小網(wǎng)站所有數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MySQL一條語句遞歸查詢所有子集數(shù)據(jù)

    MySQL中,現(xiàn)有一組數(shù)據(jù),數(shù)據(jù)包含字段主鍵:id,父類ID:pid,id與pid是繼承關(guān)系,根據(jù)某個(gè)id查詢其下級(jí)關(guān)聯(lián)的所有記錄; 1、利用遞歸查詢語法。遞歸查詢是在 MySQL 8.0 版本引入的新特性,如果您的 MySQL 版本低于 8.0,則無法使用遞歸查詢語法。 在上面的語句中,使用了 Com

    2024年02月11日
    瀏覽(31)
  • 爬蟲數(shù)據(jù)抓取怎么弄?

    爬蟲數(shù)據(jù)抓取是一種自動(dòng)化的數(shù)據(jù)采集技術(shù),可以快速、高效地從互聯(lián)網(wǎng)上獲取大量的數(shù)據(jù)。本文將介紹爬蟲數(shù)據(jù)抓取的基本原理、常用的爬蟲框架和工具、爬蟲數(shù)據(jù)抓取的注意事項(xiàng)以及爬蟲數(shù)據(jù)抓取的應(yīng)用場(chǎng)景。 一、爬蟲數(shù)據(jù)抓取的基本原理 爬蟲數(shù)據(jù)抓取的基本原理是通

    2024年02月05日
    瀏覽(19)
  • 逆向爬蟲進(jìn)階實(shí)戰(zhàn):突破反爬蟲機(jī)制,實(shí)現(xiàn)數(shù)據(jù)抓取

    逆向爬蟲進(jìn)階實(shí)戰(zhàn):突破反爬蟲機(jī)制,實(shí)現(xiàn)數(shù)據(jù)抓取

    隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)站為了保護(hù)自己的數(shù)據(jù)和資源,紛紛采用了各種反爬蟲機(jī)制。然而,逆向爬蟲技術(shù)的出現(xiàn),使得我們可以突破這些限制,實(shí)現(xiàn)對(duì)目標(biāo)網(wǎng)站的深入分析和抓取。本文將介紹逆向爬蟲進(jìn)階實(shí)戰(zhàn)的一些技巧和代碼片段,幫助讀者更好地理解和掌握這一技術(shù)。

    2024年02月04日
    瀏覽(21)
  • 高并發(fā)數(shù)據(jù)抓取實(shí)戰(zhàn):使用HTTP爬蟲ip提升抓取速度

    高并發(fā)數(shù)據(jù)抓取實(shí)戰(zhàn):使用HTTP爬蟲ip提升抓取速度

    又到每天一期學(xué)習(xí)爬蟲的時(shí)間了,作為一名專業(yè)的爬蟲程序員,今天要跟你們分享一個(gè)超實(shí)用的技巧,就是利用HTTP爬蟲ip來提升高并發(fā)數(shù)據(jù)抓取的速度。聽起來有點(diǎn)高大上?別擔(dān)心,我會(huì)用通俗易懂的話來和你們說,讓你們秒懂怎么操作的。 首先,咱們得理解一下為什么HT

    2024年02月11日
    瀏覽(23)
  • Python網(wǎng)絡(luò)爬蟲-WebSocket數(shù)據(jù)抓取

    目錄 前言 1、WebSocket請(qǐng)求的分析通常涉及以下幾個(gè)方面: 2、利用WebSocket爬取數(shù)據(jù) 總結(jié) 最后,創(chuàng)作不易!非常感謝大家的關(guān)注、點(diǎn)贊、評(píng)論啦!謝謝三連哦!好人好運(yùn)連連,學(xué)習(xí)進(jìn)步!工作順利哦!? 博主介紹:?專注于前后端、機(jī)器學(xué)習(xí)、人工智能應(yīng)用領(lǐng)域開發(fā)的優(yōu)質(zhì)創(chuàng)作

    2024年04月27日
    瀏覽(18)
  • 如何使用 Python 爬蟲抓取動(dòng)態(tài)網(wǎng)頁數(shù)據(jù)

    隨著 Web 技術(shù)的不斷發(fā)展,越來越多的網(wǎng)站采用了動(dòng)態(tài)網(wǎng)頁技術(shù),這使得傳統(tǒng)的靜態(tài)網(wǎng)頁爬蟲變得無能為力。本文將介紹如何使用 Python 爬蟲抓取動(dòng)態(tài)網(wǎng)頁數(shù)據(jù),包括分析動(dòng)態(tài)網(wǎng)頁、模擬用戶行為、使用 Selenium 等技術(shù)。 在進(jìn)行動(dòng)態(tài)網(wǎng)頁爬取之前,我們需要先了解動(dòng)態(tài)網(wǎng)頁和靜

    2023年04月24日
    瀏覽(65)
  • 22.網(wǎng)絡(luò)爬蟲—APP數(shù)據(jù)抓取詳講

    22.網(wǎng)絡(luò)爬蟲—APP數(shù)據(jù)抓取詳講

    前言 : ??????個(gè)人簡(jiǎn)介:以山河作禮。 ??????: Python領(lǐng)域新星創(chuàng)作者,CSDN實(shí)力新星認(rèn)證,阿里云社區(qū)專家博主 ?????第一篇文章《1.認(rèn)識(shí)網(wǎng)絡(luò)爬蟲》獲得 全站熱榜第一,python領(lǐng)域熱榜第一 。 ?? ??第四篇文章《4.網(wǎng)絡(luò)爬蟲—Post請(qǐng)求(實(shí)戰(zhàn)演示)》 全站熱榜第八 。

    2024年02月04日
    瀏覽(21)
  • 爬蟲案例—雪球網(wǎng)行情中心板塊數(shù)據(jù)抓取

    爬蟲案例—雪球網(wǎng)行情中心板塊數(shù)據(jù)抓取

    雪球網(wǎng)行情中心網(wǎng)址:https://xueqiu.com/hq 目標(biāo):市場(chǎng)一覽板塊、熱股榜板塊、新股預(yù)告板塊、關(guān)注排行榜板塊 運(yùn)行結(jié)果如下:

    2024年01月19日
    瀏覽(16)
  • Day:006(3 ) | Python爬蟲:高效數(shù)據(jù)抓取的編程技術(shù)(爬蟲工具)

    ????????有時(shí)候我們需要控制頁面滾動(dòng)條上的滾動(dòng)條,但滾動(dòng)條并非頁面上的元素,這個(gè)時(shí)候就需要借助js是來進(jìn)行操作。 一般用到操作滾動(dòng)條的會(huì)兩個(gè)場(chǎng)景: 要操作的頁面元素不在當(dāng)前頁面范圍,無法進(jìn)行操作,需要拖動(dòng)滾動(dòng)條 注冊(cè)時(shí)的法律條文需要閱讀,判斷用戶是

    2024年04月16日
    瀏覽(48)
  • Day:006(2 ) | Python爬蟲:高效數(shù)據(jù)抓取的編程技術(shù)(爬蟲工具)

    窗口的定位: 對(duì)于一個(gè)現(xiàn)代的web應(yīng)用,經(jīng)常會(huì)出現(xiàn)框架(frame) 或窗口(window)的應(yīng)用,這也就給我們的定位帶來了一個(gè)難題。 有時(shí)候我們定位一個(gè)元素,定位器沒有問題,但一直定位不了,這時(shí)候就要檢查這個(gè)元素是否在一個(gè)frame中,seelnium webdriver提供了一個(gè)switch_to_fram

    2024年04月12日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包