scrapy学习之路(八)网页解析:BeautifulSoup

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

 

                 

你可能感兴趣的:(网络爬虫)