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中。