mysql - php寫的爬蟲報記憶體不足

來源:互聯網
上載者:User
具體的情境:php從網站列表上抓取資料,然後直接插入mysql資料庫,使用cli模式運行,一次可能要插入上萬條資料
我之前的代碼是這樣的:

ini_set('memory_limit', '512M');$con = mysqli_connect(''');for(...) {//爬蟲抓取代碼省略mysqli_query($con,'抓取後產生的insert語句');}

這樣差不多半天就會報Allowed memory size of 536870912 bytes exhausted (tried to allocate 1542571 bytes)
PS:如果不執行mysql插入操作,而直接將sql語句file_put_contents到一個檔案中,那是不會報錯的,所以排除爬蟲代碼的問題

現在我把mysql的插入語句封裝成一個方法:

function execute($query){    $mysqli = new mysqli(...);    $mysqli->query('set names utf8mb4');    $mysqli->query($query);    $mysqli->close();}

不知道還會不會發生這個問題呢?
各位有什麼好辦法嗎?

回複內容:

具體的情境:php從網站列表上抓取資料,然後直接插入mysql資料庫,使用cli模式運行,一次可能要插入上萬條資料
我之前的代碼是這樣的:

ini_set('memory_limit', '512M');$con = mysqli_connect(''');for(...) {//爬蟲抓取代碼省略mysqli_query($con,'抓取後產生的insert語句');}

這樣差不多半天就會報Allowed memory size of 536870912 bytes exhausted (tried to allocate 1542571 bytes)
PS:如果不執行mysql插入操作,而直接將sql語句file_put_contents到一個檔案中,那是不會報錯的,所以排除爬蟲代碼的問題

現在我把mysql的插入語句封裝成一個方法:

function execute($query){    $mysqli = new mysqli(...);    $mysqli->query('set names utf8mb4');    $mysqli->query($query);    $mysqli->close();}

不知道還會不會發生這個問題呢?
各位有什麼好辦法嗎?

你目前的做法是上萬次插入上萬條資料,而不是一次插入上萬條資料。
From

INSERT INTO tbl_name (a,b,c) VALUES (1,2,3);INSERT INTO tbl_name (a,b,c) VALUES (4,5,6);INSERT INTO tbl_name (a,b,c) VALUES (7,8,9);

To

INSERT INTO tbl_name    (a,b,c)VALUES    (1,2,3),    (4,5,6),    (7,8,9);

資料庫插入操作改為批量提交方式

$sql = array(); foreach( $data as $row ) {    $sql[] = '("'.mysql_real_escape_string($row['text']).'", '.$row['category_id'].')';}mysql_query('INSERT INTO table (text, category) VALUES '.implode(',', $sql));

之前做個一個類似的功能,規模是大幾十萬條
我是用的web方式去執行,在for{}中判斷一個條件,比如達到萬條後跳回本頁面,把n*10000這個參數傳過去。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.