用Python爬取更加有價值的文章
前言
在瞭解了python的語法之後,我就開始嘗試寫第一個爬蟲,並且在網上也找了很多教程,發現有幾個模組在Python爬取網頁時,特別常用,例如:
BeautfulSoup
,Requests
,csv
,re
。BeautfulSoup
是一個方便解析html的模組,具體使用可以看Beautiful Soup 4.2.0 中文文件。Requests
是一個模擬傳送請求的模組,具體使用可看Requests的開發介面。關於後兩個是Python
自帶的模組,cvs
的作用是資料的儲存,一般是.cvs
檔案,re
是Python
中的正則表示式模組,一般用於對資料的再處理,兩者的具體使用可看The Python Standard Library。
網頁爬蟲流程
在瞭解了爬蟲需要的模組後,我們就來學習一下,做一個簡單的網頁爬蟲的流程一般是什麼:
在這裡我們的小程式的流程基本上是一致的。
爬蟲
至於爬什麼網站,我選擇了爬取簡書,你也可以選取其他一些網站,像知乎,豆瓣等等。在簡書中有個模組是@IT·網際網路,我們就選擇它了,在它之中有個“熱門”選項,我們就來爬取它其中的內容,獲取熱門文章的“題目”,“閱讀人數”,“連結地址”,“評論條數”,“喜歡人數”,“打賞人數”,這樣我們就可以通過文章的“閱讀人數”,“評論條數”,“喜歡人數”,“打賞人數”選擇排序,選擇更加有價值的文章閱讀。
開啟“開發者工具”,在“network”下會點選“熱門”,第一個裡面就包含請求的url
http://www.jianshu.com/c/V2CqjW?order_by=top
。
清空network中的資訊,我們再滑動滾動條,因為是ajax
請求,所以我們會在XHR
選項發現一個帶有引數的url
地址http://www.jianshu.com/c/V2CqjW?order_by=top&page=2
,後面的page=2
就是我們需要自己設定的,可以讓它遞增,獲取更多內容。
接下來我們因為需要用BeautfulSoup
的通過css樣式獲取html的方法,所以我們需要找到定位的位置,獲取它的css樣式。這時我們需要開啟Elements
選項卡,獲取到查詢資訊的css樣式,其中每個li
接下來我們就來編寫程式了,編寫順序可按照以下步驟進行:
- 建儲存檔案
- 設定正則表示式(只要數字)
- 提供url地址
- 設定css選擇器
- 發請求,解析html
- 得到特定資訊
- 寫入檔案
- 關閉檔案
具體程式碼如下:
from tinydb import TinyDB
import csv
#建儲存檔案
db = TinyDB('collection_cxy_hot2.json')
csvfile = open("cxy_hot2.csv", "w", encoding='utf-8')
fieldnames = ["title", "href", "people", "commmit", "like", "money"]#設定表頭
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
import requests
from bs4 import BeautifulSoup
import re
reg = re.compile('(\d+)')#設定正則表示式,只要數字
#提供url地址
base_url = "http://www.jianshu.com"
hot_url="http://www.jianshu.com/c/V2CqjW?order_by=top&page=%d"
add_url=1
#設定css選擇器
title_selector = "#list-container .title"
people_selector = "div[class='meta'] > a"
commit_selector = "div[class='meta'] > a"
like_selector = "div[class='meta'] > span"
money_selector = "div[class='meta'] > span"
while(add_url < 300):
try:
#發請求,解析html
first_page = requests.request('get', hot_url% add_url).content
soup = BeautifulSoup(first_page, "lxml")
#得到特定資訊
collection_total = [i.get_text() for i in soup.select(title_selector)]
if not collection_total : break#沒資訊時,break
print(collection_total)
collection_href = [(base_url+i.get('href')) for i in soup.select(title_selector)]
collection_pepele = [int(reg.findall(i.get_text())[0]) for i in soup.select(people_selector)][::2]#獲取奇數項
collection_commit = [int(reg.findall(i.get_text())[0]) for i in soup.select(commit_selector)][1::2]#獲取偶數項
collection_like = [int(reg.findall(i.get_text())[0]) for i in soup.select(like_selector)][::2]
collection_money = [int(reg.findall(i.get_text())[0]) for i in soup.select(money_selector)][1::2]
for c,d,e,f,g,h in zip(collection_total, collection_href, collection_pepele, collection_commit, collection_like, collection_money):
collection_dict = {"title":c, "href":d, "people":e, "commmit":f, "like":g, "money":h}
#寫入檔案
db.insert(collection_dict)
writer.writerow(collection_dict)
add_url += 1#爬下一頁
except Exception as t:
print(t)
break
csvfile.close()#關閉檔案
然後執行爬蟲,驗證結果,結果正確。
得到的.csv
檔案可能用Excel
開啟會亂碼,所以在這裡提供一個可以將.json
檔案轉為格式良好的.csv
檔案的網站:JSON to CSV Converter Online,把.json
檔案傳上去,下載下來即可。
我們開啟下載檔案,就可以通過“閱讀人數”,“評論條數”,“喜歡人數”,“打賞人數”選擇排序,選擇更加有價值的文章閱讀了。
至此一個簡單的爬蟲小程式就完成了。
後續
因為這是我的第一個爬蟲程式,程式碼之中難免會有些選取規則不合適或命名不規範,希望大家能夠多多包涵,多多指正。
相關推薦
用Python爬取更加有價值的文章
前言 在瞭解了python的語法之後,我就開始嘗試寫第一個爬蟲,並且在網上也找了很多教程,發現有幾個模組在Python爬取網頁時,特別常用,例如:BeautfulSoup,Requests, csv, re。BeautfulSoup是一個方便解析html
微信PK10平臺開發與用python爬取微信公眾號文章
網址 谷歌瀏覽器 pytho google http 開發 微信 安裝python rom 本文通過微信提供微信PK10平臺開發[q-21528-76294] 網址diguaym.com 的公眾號文章調用接口,實現爬取公眾號文章的功能。註意事項 1.需要安裝python s
用python爬取有道翻譯遇到反爬,3分鐘反反爬繞過其反爬
利用有道翻譯的介面,自制一個翻譯程式 檢視其翻譯介面,發現post請求需要傳很多引數,而且經過測驗,satl,sigh屬於動態生成的,遇到這種問題怎麼辦?當然有時間的情況下,可以去研究這些引數在哪個響應中返回,或者怎麼構造,但是一般在工作中我們可能需求來了,不
用python爬取微信公眾號文章
本文通過微信提供的公眾號文章呼叫介面,實現爬取公眾號文章的功能。 # -*- coding: utf-8 -*- from selenium import webdriver import time import json import reques
用python爬取文章連結並分類
環境: OS:win10 x64 Python:3.5.1 PyCharm:5.0.3 為了方便學習,根據關鍵字過濾資料爬取下來,並做分類。 爬取jobbole import requests from bs4 import BeautifulSoup import
我用Python爬取網易雲音樂上的Hip-hop歌單,分析rapper如何押韻
line gone 謠言 大致 -i 態度 大眾 其中 當前 緣起 《中國有嘻哈》這個節目在這個夏天吸引了無數的目光,也讓嘻哈走進了大眾的視野。作為我今年看的唯一一個綜藝節目,它對我的影響也蠻大。這個夏天,我基本都在杭州度過,在上下班的taxi上,我幾乎都在刷這個節目,最後
用python爬取微博數據並生成詞雲
font 意思 extra 很多 返回 json 自己 技術分享 pre 很早之前寫過一篇怎麽利用微博數據制作詞雲圖片出來,之前的寫得不完整,而且只能使用自己的數據,現在重新整理了一下,任何的微博數據都可以制作出來,放在今天應該比較應景。 一年一度的虐汪節,是繼續蹲在角落默
用python爬取i春秋的課程
out clas sse dir quest index 影響 png 繼續 看課中內容是用get請求進行爬取課程,自己實踐的時候發現已經被改成post請求了,下面開始 打開課程頁面 我用的火狐,然後就是F12,點擊網絡,可能會有很多包,但不影響,點擊刪除就行,然後點擊第二
我用 Python 爬取微信好友,最後發現一個大秘密
代碼 我們 同學 strong 分享 簽名 ast ron tps 前言 你身處的環境是什麽樣,你就會成為什麽樣的人。現在人們日常生活基本上離不開微信,但微信不單單是一個即時通訊軟件,微信更像是虛擬的現實世界。你所處的朋友圈是怎麽樣,慢慢你的思想也會變的怎麽樣。最近在學習
怎麽用Python爬取抖音小視頻? 資深程序員都這樣爬取的(附源碼)
aid option rip size with open url var mark open 簡介 抖音,是一款可以拍短視頻的音樂創意短視頻社交軟件,該軟件於2016年9月上線,是一個專註年輕人的15秒音樂短視頻社區。用戶可以通過這款軟件選擇歌曲,拍攝15秒的音樂短視頻
分手後,小夥怒用Python爬取上萬空姐照片,贏取校花選舉大賽!
代碼 美女圖片 pst caption alt .... 不出 ima bee 首先展示下Python爬取到的成果: 我做什麽都要爭第一,這次的校花投票選舉大賽也不例外,雖然我是個男的......但是我看到了前女友竟然已經有三百多票排到第三名了,我怎麽能眼睜
誰當年還沒看過幾本小說!我用Python爬取全站的的小說!
nec 打印 b數 技術分享 mon 結果 鏈接 ons ide 然後再將請求發送出去,定義變量response,用read()方法觀察,註意將符號解碼成utf-8的形式,省的亂碼: 打印一下看結果: 看到這麽
項目實戰!我用Python爬取了14年所有的福彩3D信息
下載器 rap 寫入excel url req 理論 ola text port 前兩天,在網上看到一個有意思的問題:×××靠譜麽?為什麽還有那麽多的人相信×××? 暫且不說,×××是否靠譜?×××也分人而異,江湖上騙術很多,有些甚至會誤以為×××的準確度可以很高,這些操盤
用python爬取股票資料的一點小結
一、背景 網上對於爬取股票資料有相對完善的教程。不過大部分教程都是隻能夠爬取一段時間的股票資料,針對某一隻股票的歷史資料爬取,目前還沒有看到比較好的教程。下面對近期學的東西進行一點點小結。 二、股票資料爬取網站 網上更多推薦的是東方財富的股票資料,連結為:http://quote.eas
有哪些網站值得用python爬蟲獲取很有價值的資料
^___^一個程式設計師的淘寶店:點選開啟連結,助你快速學習python技術的一臂之力,不喜歡看廣告的請忽略這條! 0、IT桔子和36Kr在專欄文章中(http://zhuanlan.zhihu.com/p/20714713),抓取IT橘子和36Kr的各公司的投融資資料
用python爬取美女圖片
import urllib.request import os for i in range(2000, 2400): if not os.path.exists(‘tupian/’ + str(i)): os.makedirs(‘tupian/’ + str(i)) for j in
用python爬取拉勾網招聘資訊並以CSV檔案儲存
爬取拉勾網招聘資訊 1、在網頁原始碼中搜索資訊,並沒有搜到,判斷網頁資訊使用Ajax來實現的 2、檢視網頁中所需的資料資訊,返回的是JSON資料; 3、條件為北京+資料分析師的公司一共40087家,而實際拉勾網展示的資料只有 15條/頁 * 30頁 = 450條,所以需要判斷
下午不知道吃什麼?用Python爬取美團外賣評論幫你選餐!
一、介紹 朋友暑假實踐需要美團外賣APP評論這一份資料,一開始我想,這不就抓取網頁原始碼再從中提取資料就可以了嗎,結果發現事實並非如此,情況和之前崔大講過的分析Ajax來抓取今日頭條街拍美圖類似,都是通過非同步載入的方式傳輸資料,不同的是這次的是通過JS傳輸,其他的基本思路基本一致,希望那些資料
用python爬取某個詞條的原始碼
簡單例子:在百度中輸入關鍵詞,並爬取該網頁的原始碼 #-*- coding:utf-8-*- import urllib #負責url編碼處理 import urllib2 url = "http://www.baidu.com/s" word = {"wd":"冼焯庭"}
用Python爬取手機APP
本文轉自:https://mp.weixin.qq.com/s?__biz=MzAxMjUyNDQ5OA==&mid=2653558162&idx=1&sn=73ae2ee5d2453773bceec078e39ca0ed&chksm=806e3b2fb71