(1)、爬取的內容爲豆瓣網圖書TOP250的信息html
(2)、爬取豆瓣網圖書TOP250的10頁信息,經過手動瀏覽,發現其規律:python
https://book.douban.com/top250?start=0瀏覽器
https://book.douban.com/top250?start=25url
......spa
(3)、須要爬取的信息有:書名、書本的url連接、做者、出版社和出版時間、書本價格、評分、評價。翻譯
完整代碼以下:orm
import csv from lxml import etree import requests fp=open('C:\\Users\\weigengqiu\\Desktop\\booktop250.csv','w+',newline='',encoding='utf-8')————————————————————#建立csv文件,初始化該文件 writer=csv.writer(fp) writer.writerow(('bookname ','link ','author ','publisher ','date ','price ','rate ','comment '))————#寫入文件中的第一行信息點
url=['http://book.douban.com/top250?start={}'.format(str(i)) for i in range(0,250,25)]————————————————————————#列表推導式 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36'} html=requests.get(url,headers=headers)————————————————————————————————————————————————————————————————————————#獲取網頁內容 detail=etree.HTML(html.text)——————————————————————————————————————————————————————————————————————————————————#etree庫把HTML文檔爲Element對象 infos=detail.xpath('//tr[@class="item"]')—————————————————————————————————————————————————————————————————————#獲取大標籤,以此循環 for info in infos: booknames=info.xpath('td[2]/div[1]/a/@title')—————————————————————————————————————————————————————————————#經過瀏覽器檢查獲取節點 links=info.xpath('td[2]/div[1]/a/@href')——————————————————————————————————————————————————————————————————#a節點下有多個信息點,能夠經過@屬性獲取 book_infos=info.xpath('td[2]/p/text()')[0]————————————————————————————————————————————————————————————————#<p>與<div>同一子點,獲取多個信息點,有包含不少/n,因此提取第一個 authors=book_infos.split('/')[0]——————————————————————————————————————————————————————————————————————————#獲取多個信息點後,經過「/」分隔,獲得做者信息 publishers=book_infos.split('/')[-3]——————————————————————————————————————————————————————————————————————#發佈社嘗試按[2]獲取,會發現異常,某些書籍不存在中外翻譯,此時[2]獲取的則是時間,因此採用倒序輸出 dates=book_infos.split('/')[-2]———————————————————————————————————————————————————————————————————————————#倒序輸出書籍發佈時間 prices=book_infos.split('/')[-1]——————————————————————————————————————————————————————————————————————————#倒序輸出書籍價格 rates=info.xpath('td[2]/div[2]/span[2]/text()')———————————————————————————————————————————————————————————#會發現div[2]下有多個span節點,肯定對應節點輸出文本 comments=info.xpath('td[2]/p[2]/span/text()')—————————————————————————————————————————————————————————————#<p>與<div>同一子點,並且有序,肯定對應節點輸出文本
writer.writerow((booknames,links,authors,publishers,dates,prices,rates,comments))—————————————————————————#爬取信息寫入csv數據保存
fp.close()——————————————————————————————————————————————————————————————————————————————————————————————————-—#關閉csv文件
注意事項:xml
1.爬取節點的時候會報錯:IndexError: list index out of rangehtm
這個錯誤出現大約有兩種狀況:第1種可能狀況list[index]index超出範圍第2種可能狀況list是一個空的 沒有一個元素進行list[0]就會出現該錯誤