先上代碼:
import requests
from bs4 import BeautifulSoup
import time
class top250books():
def html(self, href):
max_span = 225
for page in range(0, int(max_span), 25):
page_url = href + '?start=' + str(page)
self.parse(page_url)
def parse(self, url):
html = self.request(url)
all_tables = BeautifulSoup(html.text, 'lxml').find('div', class_='indent').find_all('table')
for table in all_tables:
time.sleep(0.5)
title = table.find('div', class_='pl2').find('a').get_text()
info = table.find('p', class_='pl').get_text()
rating_nums = table.find('span', class_='rating_nums').get_text()
rating_people = table.find('span', class_='pl').get_text()
quote = table.find('span', class_='inq').get_text()
f = open('test.txt', 'ab')
f.write(("".join(title.split()) + " ").encode('utf-8'))
f.write(("".join(info.split()) + " ").encode('utf-8'))
f.write(("".join(rating_nums.split()) + " ").encode('utf-8'))
f.write(("".join(rating_people.split()) + " ").encode('utf-8'))
f.write(("".join(quote.split()) + " " + '\n').encode('utf-8'))
f.close()
print("".join(title.split()))
def request(self, url):
headers = { 'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8"}
content = requests.get(url, headers=headers)
return content
books = top250books()
books.html('https://book.douban.com/top250')
下面是爬取的部分內(nèi)容:
追風(fēng)箏的人 [美]卡勒德·胡賽尼/李繼宏/上海人民出版社/2006-5/29.00元 8.8 (260575人評價) 為你,千千萬萬遍
小王子 [法]圣埃克蘇佩里/馬振聘/人民文學(xué)出版社/2003-8/22.00元 9.0 (215493人評價) 獻(xiàn)給長成了大人的孩子們
圍城 錢鍾書/人民文學(xué)出版社/1991-2/19.00 8.9 (182470人評價) 對于“人艱不拆”四個字最徹底的違抗
活著 余華/南海出版公司/1998-5/12.00元 9.1 (123542人評價) 活著本身就是人生最大的意義
解憂雜貨店 [日]東野圭吾/李盈春/南海出版公司/2014-5/39.50元 8.6 (190788人評價) 一碗精心熬制的東野牌雞湯周循,拒絕很難
白夜行 [日]東野圭吾/劉姿君/南海出版公司/2008-9/29.80元 9.1 (179501人評價) 暗夜獨行的殘破靈魂,愛與惡本就難分難舍
挪威的森林 [日]村上春樹/林少華/上海譯文出版社/2001-2/18.80元 8.0 (180870人評價) 村上之發(fā)軔万俗,多少人的青春啟蒙
不能承受的生命之輕 [捷克]米蘭·昆德拉/許鈞/上海譯文出版社/2003-7/23.00元 8.5 (131418人評價) 朝向媚俗的一次偉大的進(jìn)軍
三體:“地球往事”三部曲之一 劉慈欣/重慶出版社/2008-1/23.00 8.8 (130765人評價) 你我不過都是蟲子
嫌疑人X的獻(xiàn)身 [日]東野圭吾/劉子倩/南海出版公司/2008-9/28.00 8.9 (126724人評價) 數(shù)學(xué)好是一種極致的浪漫
紅樓夢 [清]曹雪芹著/人民文學(xué)出版社/1996-12/59.70元 9.5 (115203人評價) 誰解其中味湾笛?
?初學(xué)爬蟲,代碼寫的很粗糙闰歪,很多地方還可以優(yōu)化嚎研,其實一直感覺拿不出手,但是誰沒有開始呢库倘,還請大家多多指教临扮。關(guān)于python的爬蟲網(wǎng)上的教程有很多,這里用到的技術(shù)教翩,我會給出學(xué)習(xí)鏈接杆勇,要比我講的好多了,大家可以去參考學(xué)習(xí)饱亿,爬蟲教程-知乎蚜退。
?這里主要寫一下自己在寫爬蟲的過程中遇到的問題及解決辦法:
?1.網(wǎng)上的教程大多是python2.x
,我用的是python3.5
與python2.x
語法和庫上有很多不一樣:比如import urllib2
變成了import urllib.request
等等此類變化很多彪笼。我覺得新的版本是未來钻注,所以選擇用新的。如果你為了學(xué)起來方便也可以用2.x的版本杰扫,如果想看看這些差別队寇,可以看這篇文章 Python 2.7.x 和 3.x 版本的重要區(qū)別。
?2.還有一個是關(guān)于字符集的問題章姓,這應(yīng)該是個很簡單的問題佳遣,我卻花了好久才徹底搞懂,這就是計算機基礎(chǔ)不扎實的后果啊凡伊。首先關(guān)于字符集和字符編碼零渐,可以參考這篇文章:字符集和字符編碼。了解這些之后可以再去了解python
里面的encode
和decode
系忙,可以參考這篇文章:python字符串的encode和decode研究心得诵盼。
?3.是關(guān)于如何應(yīng)對網(wǎng)站的反爬蟲策略,第一次運行代碼,看見書名一行一行的在終端打印出來风宁,高興的不行洁墙。第二次寫好代碼,準(zhǔn)備把書的信息寫入文本的時候戒财,卻發(fā)現(xiàn)打不開網(wǎng)站了热监,手機端,瀏覽器都不行饮寞。提示有異常請求從我的ip發(fā)出孝扛,請登陸后使用。我才意識到ip被封了幽崩,我又去搜索了一下苦始,才知道豆瓣對請求的頻率有限制。像識別User-Agent
這種基本的反爬蟲策略慌申,幾乎所有網(wǎng)站都有陌选,頻率限制是一些特別的網(wǎng)站才有。當(dāng)時我真是覺得又激動又覺得很有意思太示,有種偷偷做壞事的感覺毒姨。過了兩天啦扬,我發(fā)現(xiàn),豆瓣又解禁了ip文兢,我這次吸取經(jīng)驗邻吭,每請求一次餐弱,我都讓程序sleep0.5s
。這樣它就發(fā)現(xiàn)不了了囱晴,不過速度是真的慢膏蚓。還有一種代價比較高的方法是買很多代理ip,打一槍換一個地方畸写。
寫在最后:
關(guān)于爬蟲要學(xué)習(xí)的還有很多驮瞧,因為畢設(shè)要用到微博數(shù)據(jù),所以要爬去微博數(shù)據(jù)枯芬,下個目標(biāo)就是要能模擬登陸新浪微博论笔。寫代碼真是太有意思了!嘿嘿千所。