作業(yè)代碼
# -*- coding: utf-8 -*-
import lxml
import requests
import re
import sys
from bs4 import BeautifulSoup
import csv
reload(sys)
sys.setdefaultencoding("utf-8")
def get_data(link):
headers = {"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"}
#link = 'http://www.reibang.com/trending/weekly?utm_medium=index-banner-s&utm_source=desktop'
html = requests.get(link, headers=headers)
soup = BeautifulSoup(html.content, 'html.parser')
total = []
total_data = soup.findAll("div", {"class": "content"})
for alone_data in total_data:
alone = []
author = alone_data.find("a", {"class": "blue-link"}).get_text()
title = alone_data.find("a", {"class": "title"}).get_text()
meta = alone_data.find("div", {"class": "meta"})
read_num = meta.findAll("a", {"target": "_blank"})[0].get_text()
comment_num = meta.findAll("a", {"target": "_blank"})[1].get_text()
like_num = meta.findAll("span")[0].get_text()
post_date = alone_data.span['data-shared-at']
alone.append(post_date)
alone.append(author)
alone.append(title)
alone.append(read_num)
alone.append(comment_num)
alone.append(like_num)
try:
money_num = meta.findAll("span")[1].get_text()
alone.append(money_num)
except:
alone.append("沒(méi)贊賞")
total.append(alone)
return total
if __name__ == "__main__":
f = file('jian.csv', 'wb')
f.write('\xEF\xBB\xBF')
writer = csv.writer(f)
for i in range(1,6):
link = 'http://www.reibang.com/trending/weekly?&page=%s' %i
print "正在處理" + str(i)
p = get_data(link)
for m in p:
writer.writerow(m)
f.close()
print "處理完畢"
作業(yè)結(jié)果
作業(yè)的思路
本來(lái)是打算用scrapy的休溶,但是由于才剛開始看scrapy文檔房官,就卡在輸出item
上了淹辞,就還是選擇了老套路哩陕,單線程爬蟲贰剥。
思路比較簡(jiǎn)單清笨,就是找標(biāo)簽只搁,不過(guò)在異步加載這里卡了挺久的突倍,由于做爬蟲的經(jīng)驗(yàn)也比較少队伟,沒(méi)有遇到過(guò)有異步加載的網(wǎng)站穴吹,只見過(guò)一個(gè)視頻里有講到過(guò)異步加載,也只是一筆帶過(guò)嗜侮,只記得是構(gòu)造表單港令,經(jīng)過(guò)一陣觀察,只看到兩個(gè)比較可能的地方
可能一锈颗、
看到這顷霹,想到了構(gòu)造表單,但是發(fā)現(xiàn)有很多
id
击吱,也沒(méi)有辦法來(lái)構(gòu)造表單淋淀,無(wú)奈放棄,另找出路可能二覆醇、
這里也出現(xiàn)了一個(gè)page2朵纷,但是看到這么一長(zhǎng)串的id號(hào),實(shí)在是嚇人永脓,一開始不太相信袍辞,但是又看了下另一個(gè)page3
于是聯(lián)想,有沒(méi)有這樣一種可能常摧,每個(gè)七天榜的id都是不一樣的搅吁,id也許與頁(yè)面無(wú)關(guān)威创,又嘗試了一下,把id刪了谎懦,只保留page=x肚豺,于是有
接下來(lái)的事情就簡(jiǎn)單了...
在作業(yè)中遇到的坑
坑一、在調(diào)試的過(guò)程中界拦,總是被return
的位置所困擾详炬,以至于得不到想要的結(jié)果,說(shuō)明自己在邏輯判斷這一塊還是有所欠缺
坑二寞奸、關(guān)于寫入到csv文件中呛谜,在輸出的到csv文件中,并轉(zhuǎn)化成excel文件后枪萄,發(fā)現(xiàn)read_num
和comment_num
這兩列無(wú)法排序隐岛,糾其原因,是無(wú)法選取其值瓷翻,將他們復(fù)制下來(lái)到文本中聚凹,發(fā)現(xiàn)多了幾個(gè)引號(hào):
想來(lái)想去,都不知道是什么原因齐帚,不知道如何改正妒牙,只能自己手動(dòng)清洗一下
要改進(jìn)的地方
- 單線程爬蟲還是太慢了,保存的方式也是有限的对妄,更應(yīng)該用scrapy來(lái)寫湘今,為日后大數(shù)據(jù)爬取打下基礎(chǔ)
- 由于時(shí)間比較趕,也沒(méi)有來(lái)得急進(jìn)行分詞剪菱,和統(tǒng)計(jì)并進(jìn)行分析摩瞎,也說(shuō)明自己在寫爬蟲這一方面還是不太熟練,總是要翻文檔