scrapy通過selenium獲取到網頁以後,爲了獲取數據,我們需要對網頁進行解析,BeautifulSoup是一種比較好用的頁面解析工具。
(一) 安裝beautifulsoup4
pip install beautifulsoup4
(二)在spider中解析網頁:
(1)引入模塊:
from bs4 import BeautifulSoup
(2) 通過頁面數據構建BeautifulSoup對象
soup = BeautifulSoup(response.body.decode('utf-8'), 'html.parser')
(3)解析數據,常用的如下:
list = soup.find_all('li', 'list-item')
ali.select('.d-t-c>.media') #獲取tag
ali.select('div[class="font-15 m-t-5 clearfix"]')[0].text #獲取內容
都是通過css選擇器篩選數據,瞭解css的基本都能理解上面的含義了
(4)構建item:
爲了將解析的數據從spider自動傳遞到pipeline,進行持久化存儲等後續操作,需要將解析的數據轉化爲item,
創建item類(繼承自scrapy.Item),代碼如下:
import scrapy
class SpiderItem(scrapy.Item):
# define the fields for your item here like:
name = scrapy.Field(serializer=str)#serializer聲明序列化,有序列化要求的必須寫上,否則會報序列化異常
position = scrapy.Field(serializer=str)
date = scrapy.Field(serializer=str)
content = scrapy.Field(serializer=str)
pass
在spider中賦值返回即可,代碼如下:
def parse(self, response):
item = MaimaispiderItem()
item['name'] = ali.select('div[class="font-13 m-t-5 clearfix"]')[0].text
item['position'] = ali.select('div[class="font-14 m-t-5 clearfix"]')[0].text
item['date'] = ali.select('div[class="font-15 m-t-5 clearfix"]')[0].text
item['content'] = ali.select('div[class="font-16 m-t-5 clearfix"]')[0].text
yield item
如果設置了pipeline,則 數據會自動發送到pipeline中。