開發環境:(windows)eclipse+pydev
**:
from lxml import etree #解析提取資料
import requests #請求網頁獲取網頁資料
import csv #儲存資料
fp = open('d:\pyproject\douban.csv','wt',newline='',encoding='utf-8') #建立csv檔案
writer = csv.writer(fp)
writer.writerow(('name','url','author','publisher','date','price','rate','comment')) #寫入表頭資訊,即第一行
urls = [''.format(str(i)) for i in range(0,250,25)] #構建urls
for url in urls: #迴圈url,先抓大,後抓小(!!!重要,下面詳解)
html = requests.get(url,headers = headers)
selector = etree.html(html.text)
infos = selector.xpath('//tr[@class="item"]')
for info in infos:
name = info.xpath('td/div/a/@title')
url = info.xpath('td/div/a/@href')
book_infos = info.xpath('td/p/text()')[0]
author = book_infos.split('/')[0]
publisher =book_infos.split('/')[-3]
date = book_infos.split('/')[-2]
price = book_infos.split('/')[-1]
rate = info.xpath('td/div/span[2]/text()')
comments = info.xpath('td/p/span/text()')
comment = comments[0] if len(comments) != 0 else ''
writer.writerow((name,url,author,publisher,date,price,rate,comment)) #寫入資料
fp.close() #關閉csv檔案,勿忘
成果展示:
#亂碼錯誤,用記事本開啟,另存為utf-8檔案可解決
本例主要學習csv庫的使用與資料批量抓取方式(即先抓大,後抓小,尋找迴圈點)
csv庫建立csv檔案及寫入資料方式:
import csv
fp = ('c://users/lp/desktop/text.csv','w+')
writer = csv.writer(fp)
writer.writerow('id','name')
writer.writerow('1','oct')
writer.writerow('2','nov') #寫入行
fp.close()
資料批量抓取:
通過類似於beautifulsoup中的selector()刪除謂語部分不可行,思路應為「先抓大,後抓小,尋找迴圈點」(手寫,非copy xpath)
開啟chrome瀏覽器進行「檢查」,通過「三角形符號」摺疊元素,找到完整的資訊標籤,如下圖
(selector()獲取資料集中最大區域,遵循路徑表示式,第乙個字串前置)
後每個單獨的資料(名字,**等)另取:
如 name,歸屬:—>—>
所以:(當歸屬指向不變時,取小範圍的)
name = info.xpath('td/div/a/@title')
爬取豆瓣Top250
requests庫可以自動爬取html頁面,自動網路請求提交。安裝方法 pip install requests requests庫主要有7個方法 首先開啟網頁 豆瓣top250 然後f12,得到如下圖 我們要找的內容在紅框裡面。這個頁面有25個電影,第乙個頁面 第二個頁面 我們可以觀察到 每個頁面...
爬取豆瓣top250
案例實現 需求 要爬取豆瓣top250的電影資訊資料 標題 評分 引言 詳情頁的url 10頁的資料 都要爬取 並寫入到csv檔案中 第一頁 第二頁 第三頁 第四頁 一共是250條 25頁 分析 page 1 25 總結 第乙個 str格式化的運用 解決辦法 先是找規律 進行格式化的替換 douba...
爬取豆瓣TOP250書單
小白學習爬蟲 爬取豆瓣top250的書,正好本人也喜歡看書 思路分析 這是top250第一頁的鏈結 start 25第二頁的鏈結 start 50第三頁的鏈結 將第一頁鏈結改為?start 0也是可以訪問的,每一頁數字加25,構建10頁 如下 urls start format str i for ...