HOME 首頁(yè)
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營(yíng)
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專(zhuān)注品牌策劃15年

    網(wǎng)絡(luò)爬蟲(chóng)關(guān)鍵詞抓?。ňW(wǎng)絡(luò)爬蟲(chóng)關(guān)鍵詞抓取詞云圖)

    發(fā)布時(shí)間:2023-03-12 10:40:21     稿源: 創(chuàng)意嶺    閱讀: 1105        問(wèn)大家

    大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于網(wǎng)絡(luò)爬蟲(chóng)關(guān)鍵詞抓取的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。

    創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶(hù)遍布全球各地,相關(guān)業(yè)務(wù)請(qǐng)撥打電話(huà):175-8598-2043,或添加微信:1454722008

    本文目錄:

    網(wǎng)絡(luò)爬蟲(chóng)關(guān)鍵詞抓取(網(wǎng)絡(luò)爬蟲(chóng)關(guān)鍵詞抓取詞云圖)

    一、python爬蟲(chóng)一般都爬什么信息

    python爬蟲(chóng)一般都爬什么信息?

    一般說(shuō)爬蟲(chóng)的時(shí)候,大部分程序員潛意識(shí)里都會(huì)聯(lián)想為Python爬蟲(chóng),為什么會(huì)這樣,我覺(jué)得有兩個(gè)原因:

    1.Python生態(tài)極其豐富,諸如Request、Beautiful Soup、Scrapy、PySpider等第三方庫(kù)實(shí)在強(qiáng)大

    2.Python語(yǔ)法簡(jiǎn)潔易上手,分分鐘就能寫(xiě)出一個(gè)爬蟲(chóng)(有人吐槽Python慢,但是爬蟲(chóng)的瓶頸和語(yǔ)言關(guān)系不大)

    爬蟲(chóng)是一個(gè)程序,這個(gè)程序的目的就是為了抓取萬(wàn)維網(wǎng)信息資源,比如你日常使用的谷歌等搜索引擎,搜索結(jié)果就全都依賴(lài)爬蟲(chóng)來(lái)定時(shí)獲取

    看上述搜索結(jié)果,除了wiki相關(guān)介紹外,爬蟲(chóng)有關(guān)的搜索結(jié)果全都帶上了Python,前人說(shuō)Python爬蟲(chóng),現(xiàn)在看來(lái)果然誠(chéng)不欺我~

    爬蟲(chóng)的目標(biāo)對(duì)象也很豐富,不論是文字、圖片、視頻,任何結(jié)構(gòu)化非結(jié)構(gòu)化的數(shù)據(jù)爬蟲(chóng)都可以爬取,爬蟲(chóng)經(jīng)過(guò)發(fā)展,也衍生出了各種爬蟲(chóng)類(lèi)型:

    ● 通用網(wǎng)絡(luò)爬蟲(chóng):爬取對(duì)象從一些種子 URL 擴(kuò)充到整個(gè) Web,搜索引擎干的就是這些事

    ● 垂直網(wǎng)絡(luò)爬蟲(chóng):針對(duì)特定領(lǐng)域主題進(jìn)行爬取,比如專(zhuān)門(mén)爬取小說(shuō)目錄以及章節(jié)的垂直爬蟲(chóng)

    ● 增量網(wǎng)絡(luò)爬蟲(chóng):對(duì)已經(jīng)抓取的網(wǎng)頁(yè)進(jìn)行實(shí)時(shí)更新

    ● 深層網(wǎng)絡(luò)爬蟲(chóng):爬取一些需要用戶(hù)提交關(guān)鍵詞才能獲得的 Web 頁(yè)面

    不想說(shuō)這些大方向的概念,讓我們以一個(gè)獲取網(wǎng)頁(yè)內(nèi)容為例,從爬蟲(chóng)技術(shù)本身出發(fā),來(lái)說(shuō)說(shuō)網(wǎng)頁(yè)爬蟲(chóng),步驟如下:

    模擬請(qǐng)求網(wǎng)頁(yè)資源

    從HTML提取目標(biāo)元素

    數(shù)據(jù)持久化

    相關(guān)推薦:《Python教程》以上就是小編分享的關(guān)于python爬蟲(chóng)一般都爬什么信息的詳細(xì)內(nèi)容希望對(duì)大家有所幫助,更多有關(guān)python教程請(qǐng)關(guān)注環(huán)球青藤其它相關(guān)文章!

    二、如何使用webcollector爬取搜索引擎

    使用webcollector爬取搜索引擎,按照關(guān)鍵字搜索的結(jié)果頁(yè)面,解析規(guī)則可能會(huì)隨百度搜索的改版而失效。

    代碼如下:

    [java] view plain copy

    package com.wjd.baidukey.crawler;

    import java.io.ByteArrayInputStream;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.net.URLEncoder;

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.PreparedStatement;

    import java.sql.ResultSet;

    import java.sql.SQLException;

    import java.sql.Statement;

    import java.text.SimpleDateFormat;

    import java.util.Date;

    import java.util.HashMap;

    import java.util.TimeZone;

    import org.apache.poi.poifs.filesystem.DirectoryEntry;

    import org.apache.poi.poifs.filesystem.POIFSFileSystem;

    import org.jsoup.nodes.Element;

    import org.jsoup.select.Elements;

    import cn.edu.hfut.dmic.contentextractor.ContentExtractor;

    import cn.edu.hfut.dmic.webcollector.model.CrawlDatum;

    import cn.edu.hfut.dmic.webcollector.model.CrawlDatums;

    import cn.edu.hfut.dmic.webcollector.model.Page;

    import cn.edu.hfut.dmic.webcollector.plugin.ram.RamCrawler;

    public class BdiduKeywordCrawler extends RamCrawler{

    private Connection connection;

    private PreparedStatement pstatement;

    // 連接MySql數(shù)據(jù)庫(kù),用戶(hù)名root,密碼mahao

    String url = "jdbc:mysql://localhost:3306/wjd";

    String username = "root";

    String password = "mahao";

    //保存抽取到的數(shù)據(jù)

    StringBuilder result = new StringBuilder();

    public BdiduKeywordCrawler(String keyword, int maxPageNum) throws Exception {

    for (int pageNum = 1; pageNum <= maxPageNum; pageNum++) {

    String url = createUrl(keyword, pageNum);

    CrawlDatum datum = new CrawlDatum(url)

    .putMetaData("keyword", keyword)

    .putMetaData("pageNum", pageNum + "")

    .putMetaData("pageType", "searchEngine")

    .putMetaData("depth", "1");

    addSeed(datum);

    }

    }

    @Override

    public void visit(Page page, CrawlDatums next) {

    String keyword = page.getMetaData("keyword");

    String pageType = page.getMetaData("pageType");

    int depth = Integer.valueOf(page.getMetaData("depth"));

    if (pageType.equals("searchEngine")) {

    int pageNum = Integer.valueOf(page.getMetaData("pageNum"));

    System.out.println("成功抓取關(guān)鍵詞" + keyword + "的第" + pageNum + "頁(yè)搜索結(jié)果");

    // || div[class=result-op c-container xpath-log ]>h4>a

    Elements results = page.select("div[class=result c-container ]>h4>a");

    // Elements results1 = page.select("div[class=result-op c-container xpath-log]>h4>a");//,div[id=result-op c-container xpath-log]>h4>a

    //System.out.println(results1.get(0));

    //results.add(results1.get(0));

    for (int rank = 0; rank < results.size(); rank++) {

    Element result = results.get(rank);

    /*

    * 我們希望繼續(xù)爬取每條搜索結(jié)果指向的網(wǎng)頁(yè),這里統(tǒng)稱(chēng)為外鏈。

    * 我們希望在訪(fǎng)問(wèn)外鏈時(shí)仍然能夠知道外鏈處于搜索引擎的第幾頁(yè)、第幾條,

    * 所以將頁(yè)號(hào)和排序信息放入后續(xù)的CrawlDatum中,為了能夠區(qū)分外鏈和

    * 搜索引擎結(jié)果頁(yè)面,我們將其pageType設(shè)置為outlink,這里的值完全由 用戶(hù)定義,可以設(shè)置一個(gè)任意的值

    * 在經(jīng)典爬蟲(chóng)中,每個(gè)網(wǎng)頁(yè)都有一個(gè)refer信息,表示當(dāng)前網(wǎng)頁(yè)的鏈接來(lái)源。

    * 例如我們首先訪(fǎng)問(wèn)新浪首頁(yè),然后從新浪首頁(yè)中解析出了新的新聞鏈接,

    * 則這些網(wǎng)頁(yè)的refer值都是新浪首頁(yè)。WebCollector不直接保存refer值,

    * 但我們可以通過(guò)下面的方式,將refer信息保存在metaData中,達(dá)到同樣的效果。

    * 經(jīng)典爬蟲(chóng)中錨文本的存儲(chǔ)也可以通過(guò)下面方式實(shí)現(xiàn)。

    * 在一些需求中,希望得到當(dāng)前頁(yè)面在遍歷樹(shù)中的深度,利用metaData很容易實(shí)現(xiàn)

    * 這個(gè)功能,在將CrawlDatum添加到next中時(shí),將其depth設(shè)置為當(dāng)前訪(fǎng)問(wèn)頁(yè)面 的depth+1即可。

    */

    CrawlDatum datum = new CrawlDatum(result.attr("abs:href"))

    .putMetaData("keyword", keyword)

    .putMetaData("pageNum", pageNum + "")

    .putMetaData("rank", rank + "")

    .putMetaData("pageType", "outlink")

    .putMetaData("depth", (depth + 1) + "")

    .putMetaData("refer", page.getUrl());

    next.add(datum);

    }

    } else if (pageType.equals("outlink")) {

    /*int pageNum = Integer.valueOf(page.getMetaData("pageNum"));

    int rank = Integer.valueOf(page.getMetaData("rank"));

    String refer = page.getMetaData("refer");*/

    try {

    String content = ContentExtractor.getContentByUrl(page.getUrl());

    /*String line = String.format(

    "第%s頁(yè)第%s個(gè)結(jié)果:標(biāo)題:%s(%s字節(jié))\tdepth=%s\trefer=%s", pageNum,

    rank + 1, page.getDoc().title(), content,

    depth, refer);*/

    String line = String.format("標(biāo)題:%s\n來(lái)源:%s\n正文:%s", page.getDoc().title(),page.getUrl(),content);

    HashMap<String, String> data = new HashMap<String,String>();

    Date currentDate = new java.util.Date();

    SimpleDateFormat myFmt = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

    TimeZone timeZoneChina = TimeZone.getTimeZone("Asia/Shanghai");// 獲取中國(guó)的時(shí)區(qū)

    myFmt.setTimeZone(timeZoneChina);// 設(shè)置系統(tǒng)時(shí)區(qū)

    String grabTime = myFmt.format(currentDate);// new Date()為獲取當(dāng)前系統(tǒng)時(shí)間

    data.put("title", page.getDoc().title());

    data.put("from", page.getUrl());

    data.put("content", content);

    data.put("grabTime", grabTime);

    //String line = String.format("標(biāo)題:%s\n", page.getDoc().title());

    //持久化到word文檔中

    //是否為線(xiàn)程安全???

    //synchronized(this) {

    String destFile = "D:\\"+"Result"+keyword+".doc";

    result.append(line);

    //將result寫(xiě)到doc文件中

    write2File(destFile,result.toString());

    //添加到數(shù)據(jù)庫(kù)中

    addResultData(data);

    //}

    System.out.println(line);

    } catch (Exception e) {

    //e.printStackTrace();

    System.out.println("鏈接"+page.getUrl()+"失效");

    }

    }

    }

    //將數(shù)據(jù)保存到mysql數(shù)據(jù)庫(kù)中

    private void addResultData(HashMap<String, String> data) {

    String title = data.get("title");

    String source_url = data.get("from");

    String content = data.get("content").replaceAll("\\?{2,}", "");//去掉字符串中出現(xiàn)的多個(gè)連續(xù)問(wèn)號(hào)。

    //抓取時(shí)間

    String grabTime = data.get("grabTime");

    /*SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

    Date date = null;

    try {

    date = format.parse(grabTime);

    } catch (Exception e) {

    e.printStackTrace();

    }*/

    //System.out.println("抓取時(shí)間"+grabTime);

    try {

    connection = DriverManager.getConnection(url, username, password);

    String sql = "INSERT INTO wjd_keyword_search_table(TITLE,GRAP_TIME,CONTENT,SOURCE_URL) VALUES(?,?,?,?)";

    String checkSql = "select 1 from wjd_keyword_search_table where TITLE='" + title + "'";

    Statement statement = connection.prepareStatement(checkSql);

    ResultSet result = statement.executeQuery(checkSql);

    if (!result.next()) {

    // 如果數(shù)據(jù)庫(kù)中不存在該記錄,則添加到數(shù)據(jù)庫(kù)中

    pstatement = connection.prepareStatement(sql);

    pstatement.setString(1, title);

    //pstatement.setString(2, date);

    pstatement.setString(2,grabTime);

    pstatement.setString(3, content);

    pstatement.setString(4, source_url);

    pstatement.executeUpdate();

    }

    } catch (SQLException e) {

    e.printStackTrace();

    }

    }

    /**

    * 將數(shù)據(jù)持久化到本地doc文件中

    * @param destFile

    * @param line

    */

    private void write2File(String destFile, String line) {

    try {

    //doc content

    ByteArrayInputStream bais = new ByteArrayInputStream(line.getBytes());

    POIFSFileSystem fs = new POIFSFileSystem();

    DirectoryEntry directory = fs.getRoot();

    directory.createDocument("WordDocument", bais);

    FileOutputStream ostream = new FileOutputStream(destFile);

    fs.writeFilesystem(ostream);

    bais.close();

    ostream.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    public static void main(String[] args) throws Exception {

    String[] keywordsList = {"網(wǎng)絡(luò)爬蟲(chóng)","搜索引擎"};

    int pageToal =5;

    for (String keyword : keywordsList) {

    BdiduKeywordCrawler crawler = new BdiduKeywordCrawler(keyword, pageToal);

    crawler.start();

    }

    }

    /**

    * 根據(jù)關(guān)鍵詞和頁(yè)號(hào)拼接百度搜索對(duì)應(yīng)的URL

    */

    public static String createUrl(String keyword, int pageNum)

    throws Exception {

    int first = (pageNum-1) * 10;

    keyword = URLEncoder.encode(keyword, "utf-8");

    return String.format("https://www.baidu.com/s?wd=%s&pn=%s",

    keyword, first);

    }

    }

    三、網(wǎng)絡(luò)爬蟲(chóng)主要能干啥?

    網(wǎng)絡(luò)爬蟲(chóng),是一種自動(dòng)獲取網(wǎng)頁(yè)內(nèi)容的程序,是搜索引擎的重要組成部分。一般人能訪(fǎng)問(wèn)到的網(wǎng)頁(yè),爬蟲(chóng)也都能抓取。所謂的爬蟲(chóng)抓取,也是類(lèi)似于我們?yōu)g覽網(wǎng)頁(yè)。但與普通人上網(wǎng)方式不同,爬蟲(chóng)是可以按照一定的規(guī)則,自動(dòng)的采集信息。

    舉個(gè)例子,比如說(shuō)你從事的是文字編輯工作,需求稿件量大,可是效率很低,最大的一個(gè)原因便是很多的時(shí)間花費(fèi)在了采集資料上,假如繼續(xù)按照之前手動(dòng)瀏覽的方式,要么就是你通宵達(dá)旦熬夜加班,要么便是讓其他人幫你,但顯然兩者都不方便。這種情況下,網(wǎng)絡(luò)爬蟲(chóng)就顯得很重要。

    隨著大數(shù)據(jù)時(shí)代的來(lái)臨,網(wǎng)絡(luò)爬蟲(chóng)在互聯(lián)網(wǎng)中的地位將越來(lái)越重要。互聯(lián)網(wǎng)中的數(shù)據(jù)是海量的,如何自動(dòng)高效地獲取互聯(lián)網(wǎng)中我們感興趣的信息并為我們所用是一個(gè)重要的問(wèn)題,而爬蟲(chóng)技術(shù)就是為了解決這些問(wèn)題而生的。

    我們感興趣的信息分為不同的類(lèi)型:如果只是做搜索引擎,那么感興趣的信息就是互聯(lián)網(wǎng)中盡可能多的高質(zhì)量網(wǎng)頁(yè);如果要獲取某一垂直領(lǐng)域的數(shù)據(jù)或者有明確的檢索需求,那么感興趣的信息就是根據(jù)我們的檢索和需求所定位的這些信息,此時(shí),需要過(guò)濾掉一些無(wú)用信息。前者我們稱(chēng)為通用網(wǎng)絡(luò)爬蟲(chóng),后者我們稱(chēng)為聚焦網(wǎng)絡(luò)爬蟲(chóng)。

    四、如何用最簡(jiǎn)單的Python爬蟲(chóng)采集整個(gè)網(wǎng)站

    采集網(wǎng)站數(shù)據(jù)并不難,但是需要爬蟲(chóng)有足夠的深度。我們創(chuàng)建一個(gè)爬蟲(chóng),遞歸地遍歷每個(gè)網(wǎng)站,只收集那些網(wǎng)站頁(yè)面上的數(shù)據(jù)。一般的比較費(fèi)時(shí)間的網(wǎng)站采集方法從頂級(jí)頁(yè)面開(kāi)始(一般是網(wǎng)站主頁(yè)),然后搜索頁(yè)面上的所有鏈接,形成列表,再去采集到的這些鏈接頁(yè)面,繼續(xù)采集每個(gè)頁(yè)面的鏈接形成新的列表,重復(fù)執(zhí)行。

    以上就是關(guān)于網(wǎng)絡(luò)爬蟲(chóng)關(guān)鍵詞抓取相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢(xún),客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。


    推薦閱讀:

    你對(duì)網(wǎng)絡(luò)促銷(xiāo)的看法(你對(duì)網(wǎng)絡(luò)促銷(xiāo)的看法英語(yǔ)作文)

    網(wǎng)絡(luò)營(yíng)銷(xiāo)獨(dú)有的促銷(xiāo)手段(網(wǎng)絡(luò)營(yíng)銷(xiāo)獨(dú)有的促銷(xiāo)手段是)

    網(wǎng)絡(luò)營(yíng)銷(xiāo)的方法有哪些-(列舉網(wǎng)絡(luò)營(yíng)銷(xiāo)的方法有哪些)

    文創(chuàng)品牌理念(文創(chuàng)品牌理念定位)

    文化傳媒公司愿景(文化傳媒企業(yè)愿景范文簡(jiǎn)短)