程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python爬蟲——爬取某網站新聞

編輯:Python

文章目錄

  • 前言
  • 一、基本目標
  • 二、使用步驟
    • 整體代碼
  • 結果
  • 總結


前言

隨機找了個網站爬爬,我們的目標是
1.利用爬蟲的re、xpath等知識,爬取到這個官網上的新聞,內容有:新聞標題, 發布時間, 新聞鏈接, 閱讀次數, 新聞來源五個屬性。
2.把我們爬到的數據放到一個csv的文件中!
那麼我們下面開始!


提示:爬蟲不可用作違法活動,爬取時要設定休眠時間,不可過度爬取,造成服務器宕機,需付法律責任!!!

一、基本目標

我們的目標是爬取這個https://www.cqwu.edu.cn/channel_23133_0310.html網址的新聞數據

二、使用步驟

整體代碼

import re
import time
import requests
from lxml import etree
import csv
# 帶爬網址
base_url = "https://www.cqwu.edu.cn/channel_23133_0310.html"
# 反反爬
headers = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9"
}
# 爬取信息
resp = requests.get(url=base_url,headers=headers)
# 把信息通過etree進行賦值
html = etree.HTML(resp.text)
# xpath定位新聞列表信息
news_list = html.xpath("/html/body/div/div[3]/div/div/div[2]/div/ul/li")
data_list = []
# 對新聞列表循環遍歷
for news in news_list:
# 獲取新聞鏈接
news_url = news.xpath("./a/@href")[0]
# 繼續爬取新聞的詳情頁
news_resp = requests.get(url=news_url)
# 把詳情頁html信息賦值
news_html = etree.HTML(news_resp.text)
# xpath定位新聞詳情頁的標題
news_title = news_html.xpath("/html/body/div/div[3]/div[1]/div/div[2]/div/div/h4/text()")[0]
# re正則獲取日期和引用來源
time_refer_obj = re.compile(r'<div class="news-date">.*?發布時間:(?P<time>.*?)浏覽:.*?次 來源:(?P<refer>.*?)</div>', re.S)
result = time_refer_obj.finditer(news_resp.text)
for it in result:
# 對日期和引用進行賦值
news_time = it.group("time")
news_refer = it.group("refer").strip()
# re正則獲取浏覽量數據
count_obj = re.compile(r"浏覽:<Script Language='Javascript' src='(?P<count_url>.*?)'>", re.S)
result = count_obj.finditer(news_resp.text)
for it in result:
count_url = "https://www.cqwu.edu.cn" + it.group("count_url")
count_resp = requests.get(url=count_url)
news_read = count_resp.text.split("'")[1].split("'")[0]
# 創建一個字典,把各項爬取的信息賦值到字典當中
data = {
}
data['新聞標題'] = news_title
data['發布時間'] = news_time
data['新聞鏈接'] = news_url
data['閱讀次數'] = news_read
data['新聞來源'] = news_refer
# 字典添加到列表中,後續變成xml使用
data_list.append(data)
# 休眠一秒
time.sleep(1)
print(data)
# 1.創建文件對象,encoding='utf-8'是設置編碼格式,newline=''為了防止空行
f = open('news.csv', 'w', encoding='utf-8',newline='')
# 2.基於文件對象構建csv寫入對象
csv_write = csv.writer(f)
# 3.構建列表頭
csv_write.writerow(['新聞標題', '發布時間', '新聞鏈接', '閱讀次數', '新聞來源'])
for data in data_list:
# 4.寫入csv文件
csv_write.writerow([data['新聞標題'], data['發布時間'], data['新聞鏈接'], data['閱讀次數'], data['新聞來源']])
print("爬取結束!")

結果

下面是我們程序運行的輸出過程

這個是程序把數據存儲到csv文件的文檔

總結

爬蟲的基本步驟:
1.檢查有沒有反爬,設置常規反反爬,User-Agentreferer都是最常見的反爬手段
2.利用xpathre技術進行定位,定位後獲取想到的數據即可
3.利用csv庫把數據寫入到csv文件中


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved