日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

网易Python爬虫:爬取网易科技频道文章存入MySQL数据库

發布時間:2023/12/18 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网易Python爬虫:爬取网易科技频道文章存入MySQL数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一篇博客里答應的,第二篇會用 pymysql 直接將數據存入 MySQL 數據庫。
代碼部分只注釋了數據庫操作的部分,爬蟲部分有時間會補上。


網易科技頻道 以獨特視角呈現科技圈內大事小事,內容包括互聯網、IT業界、通信、趨勢、科技訪談等。
下面以 網易科技-智能 首頁為例,爬取文章的【鏈接–標題–發布時間–作者來源–具體內容】等信息并存入MySQL:

網頁分析

按【F12】鍵進入谷歌瀏覽器開發者工具,查看 Network – All

點擊【加載更多】按鈕則出現第二個 smart_datalist.js ,對比觀察 URL 的不同可直接構造用于翻頁。
smart_datalist.js 中的內容包含 json 格式的數據:

后續再逐一訪問每篇文章的 docurl ,獲取全文即可。

安裝配置 MySQL

網上教程很多,請自行百度或Google。

完整代碼

#!/usr/bin/env python # -*- coding: utf-8 -*-""" 爬取【網易科技-智能】頻道首頁的【今日熱點】文章,并存入MySQL數據庫 @Update: 2019-03-20 @Author: Newyee @Python: 3.6.5 @MySQL : 8.0 """import requests from lxml import etree import re import time import pymysqlheaders = {'User-Agent': 'Mozilla/5.0 (Windows x86; rv:19.0) Gecko/20100101 Firefox/19.0'} pattern = re.compile(r' {20}(原標題.*)\n {16}') # 用于刪除文章開頭的“原標題”內容def get_html(url):try:r = requests.get(url, headers=headers)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept Exception as e:print(e)return 'Error'def get_content(doc_url):try:text = get_html(doc_url)html = etree.HTML(text)contents = html.xpath('//div[@class="post_text"]//p/text()')content = ''.join(contents)content = re.sub(pattern, '', content)return contentexcept Exception as e:print('Get content Error:', doc_url, e)def main(urls):# 打開數據庫連接(具體配置信息請自行替換)db = pymysql.Connect(host = 'localhost',port = 3306,user = 'root',password = 'root',db = 'test',charset = 'utf8')# 建表語句sql_create = "CREATE TABLE IF NOT EXISTS wangyi_tech (id INT(5) NOT NULL AUTO_INCREMENT," \"url VARCHAR(265),title VARCHAR(265),time VARCHAR(265),source VARCHAR(265),content VARCHAR(10240),"\"PRIMARY KEY (id) ) DEFAULT CHARSET=utf8"# 創建一個游標對象cursor = db.cursor()# 執行 SQL 建表語句cursor.execute(sql_create)count = 1for url in urls:print(url)text = get_html(url)results = eval(text.replace('data_callback(', '')[:-1])for result in results:doc_url = result['docurl']title = result['title']post_time = result['time']source = result['label'].strip()try:content = get_content(doc_url)except:continueprint(count, doc_url, title)# 插入語句sql = "INSERT INTO wangyi_tech (url,title,time,source,content) " \"VALUES ('%s','%s','%s','%s','%s')" % (doc_url, title, post_time, source, content)try:# 執行 SQL 插入語句cursor.execute(sql.replace('\n','\t'))except:print('Insert Error:', doc_url)# 如果發生錯誤則回滾db.rollback()# 提交到數據庫執行db.commit()count += 1time.sleep(1)time.sleep(2)# 關閉數據庫連接db.close()print('done')if __name__ == '__main__':url1 = ['http://tech.163.com/special/00097UHL/smart_datalist.js?callback=data_callback']urls = url1 + ['http://tech.163.com/special/00097UHL/smart_datalist_0{}.js?callback=data_callback'.format(str(n))for n in range(2, 10)]main(urls)

運行結果

數據示例

ps. get_content(doc_url) 獲取文章全文對部分文章可能不適用或只獲取到部分內容
 (猜測可能是因為網易的頻道或文章時間跨度比較大,網頁結構不統一)


行文倉促,注釋和講解部分不夠詳盡,如有疑問歡迎留言交流討論~~~

總結

以上是生活随笔為你收集整理的网易Python爬虫:爬取网易科技频道文章存入MySQL数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。