日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python3 爬虫爬取中国图书网(淘书团) 记录

發布時間:2023/11/29 python 80 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python3 爬虫爬取中国图书网(淘书团) 记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本人為一名剛開始學Python爬蟲的小白,開貼僅為記錄下自己的學習歷程,方便做review

?

要爬取鏈接:http://tuan.bookschina.com/

要爬取內容: 圖書名稱, 圖書價格, 以及對應預覽圖的link

本文用到py packages: requests, BeautifulSoup, json, cvs

打開中國圖書網團購頁面時,發現網站的信息是動態加載的:

Anyways,先不考慮加載更多頁的圖書信息,我們從嘗試著抓取第一頁的圖書信息開始:

本次爬蟲所用的瀏覽器為chrome

所以我們打開瀏覽器的開發者模式F12,可以看到頁面加載的相應信息

為了實現模擬瀏覽器登錄功能,我們需要查看header的信息:

完成對應的代碼:

header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36','Host': 'tuan.bookschina.com','Referer': 'http://tuan.bookschina.com/','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.9' }

?

接下來我們需要做的就是分析整個中國圖書網的DOM,去查看我們需要的信息,都封裝在哪些tags里面

經過地毯式搜索。。。。我們發現我們所需要的信息,都封裝在 <ul id='taoList".....>的子節點li里面

?

?

?所以,我們打算采取BeautifulSoup的解析抓取功能,來實現拿到li內的我們需要的信息

對應的代碼:

url = 'http://tuan.bookschina.com/' response = requests.get(url, headers = header) #模仿瀏覽器登錄 response.encoding = 'utf-8' soup = BeautifulSoup(response.text,'html.parser') for item in soup.select('div .taoListInner ul li'):print(item.select('h2')[0].text) #返回對象為數組print(item.select('.salePrice')[0].text)print(item.select('img')[0].get('src')) #get方法用來取得tab內部的屬性值

?

首先我們需要調用requests的get方法,拿到響應的response,然后通過BS進行解析,我們會發現,在class 名為 taoListInner的div標簽中,封裝了我們想要的ul下的li

查看了beautifulsoup的文檔,對比了find_all 和select,決定調用select方法拿到對應的標簽,然后拿到對應h2標簽下的書名; salePrice class下的價格; 以及img標簽

內src的預覽圖link。這樣就可以打印出我們想要的第一頁所顯示的書籍的信息了。

?

但是問題就出來了。。。如果我們想拿后續頁面的更多書籍信息,該怎么辦呢,因為bs的select方法是只能解析靜態的Dom的

所以我們懷疑,后續的圖書數據是通過Ajax 或者 JS 加載的

我們來到開發者模式的XHR下面,我們會發現,每當我們下拉滾動條,刷新圖書信息的時候,會跟隨者刷新出一個GroupList?.....的鏈接

我們打開他

?

驚喜的發現在Preview里,封裝了我們需要的數據,并且是以Json形式予以保存的,這樣變能讓我們方便的拿到動態生成的圖書數據了。

?

?

所以我們要拿到這個Json數據,首先需要去拿他的Request URL

當前的URL為:http://tuan.bookschina.com/Home/GroupList?Type=0&Category=0&Price=0&Order=11&Page=2&Tyjson=true

我們會發現一個規律,每當有新的書籍信息刷新一次的時候,生成的GroupList?...URL中的Page=?也會跟隨遞增

所以問題迎刃而解了。。。。我們只需要去通過遍歷URL并拿到返回的JSON進行解析,便可以拿到我們想要的全部數據了

也驗證了一個說法,許多動態加載的網站,都會把Json數據封裝作為response,這樣就給我們的爬蟲找到一條捷徑

?

url = 'http://tuan.bookschina.com/Home/GroupList?Type=0&Category=0&Price=0&Order=11&Page=2&Tyjson=true' response = requests.get(url) result = json.loads(response.text) bookinfo = {} for data in result['Data']:bookinfo['bookName'] = data['book_name']bookinfo['price'] = data['group_price']bookinfo['iconLink'] = data['group_image'] print(url)

?

這里用里調用了loads()方法,把返回的json數據轉換為python的字典,方便拿數據

拿到數據后我們決定把數據存入磁盤,生成cvs的excel文件,相關的寫入文件方法,請查閱python3官方文檔。

方便做進一步的數據分析。

?

所以,本次爬蟲小實驗全部代碼如下:

import requests from bs4 import BeautifulSoup import json import csvdef parse_one_page():header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36','Host': 'tuan.bookschina.com','Referer': 'http://tuan.bookschina.com/','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.9'}url = 'http://tuan.bookschina.com/'response = requests.get(url, headers = header) #模仿瀏覽器登錄response.encoding = 'utf-8'soup = BeautifulSoup(response.text,'html.parser')for item in soup.select('div .taoListInner ul li'):print(item.select('h2')[0].text) #返回對象為數組print(item.select('.salePrice')[0].text)print(item.select('img')[0].get('src')) #get方法用來取得tab內部的屬性值def dynamtic_scraping_data(page, headers, fileName):for i in range(page):url = 'http://tuan.bookschina.com/Home/GroupList?Type=0&Category=0&Price=0&Order=11&Page=' + str(i) + '&Tyjson=true'response = requests.get(url)result = json.loads(response.text)bookinfo = {}for data in result['Data']:bookinfo['bookName'] = data['book_name']bookinfo['price'] = data['group_price']bookinfo['iconLink'] = data['group_image']write_csv_rows(fileName,headers,bookinfo)print(url)def write_csv_headers(path, headers):with open(path, 'a', encoding='gb18030', newline='') as f:f_csv = csv.DictWriter(f, headers)f_csv.writeheader()def write_csv_rows(path, headers, rows):with open(path, 'a', encoding='gb18030', newline='') as f:f_csv = csv.DictWriter(f, headers)# 如果寫入數據為字典,則寫入一行,否則寫入多行if type(rows) == type({}):f_csv.writerow(rows)else:f_csv.writerows(rows) def main(page):# parse_one_page() #Tip: beautifulSoup testcsv_filename = "bookInfo.csv"headers = ['bookName', 'price', 'iconLink']write_csv_headers(csv_filename,headers)dynamtic_scraping_data(page, headers, csv_filename)if __name__ == '__main__':main(20) #input page num to start

?

轉載于:https://www.cnblogs.com/ChrisInsistPy/p/8981820.html

總結

以上是生活随笔為你收集整理的Python3 爬虫爬取中国图书网(淘书团) 记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。