VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • 爬虫(十八):Scrapy框架(五) Scrapy通用爬虫(2)

https://www.qidian.com/all\?orderId=\&style=1\&pageSize=20\&siteid=1\&pubflag=0\&hiddenField=0\&page=(\d+)')),follow=True),
  • #匹配详情页面 不作深度爬取
  • Rule(LinkExtractor(allow=r'https://book.qidian.com/info/(\d+)'), callback='parse_item', follow=False),
  • )
  • 1.3.3 解析页面

    接下来我们需要做的就是解析页面内容了,将书名、作者、状态、类型、简介、评分、故事、最新章节提取出来即可。首先定义一个Item。

    
    
    1. # -*- coding: utf-8 -*-
    2.  
    3. # Define here the models for your scraped items
    4. #
    5. # See documentation in:
    6. # https://doc.scrapy.org/en/latest/topics/items.html
    7.  
    8. from scrapy import Field,Item
    9.  
    10. class QdItem(Item):
    11. # define the fields for your item here like:
    12.  
    13. book_name = Field() #书名
    14. author=Field() #作者
    15. state=Field() #状态
    16. type=Field() #类型
    17. about=Field() #简介
    18. score=Field() #评分
    19. story=Field() #故事
    20. news=Field() #最新章节

    然后我创建了很多方法,在分别获取这些信息。

    
    
    1. def get_book_name(self,response):
    2.  
    3. book_name=response.xpath('//h1/em/text()').extract()[0]
    4. if len(book_name)>0:
    5. book_name=book_name.strip()
    6. else:
    7. book_name='NULL'
    8. return book_name
    9.  
    10. def get_author(self,response):
    11. author=response.xpath('//h1/span/a/text()').extract()[0]
    12. if len(author)>0:
    13. author=author.strip()
    14. else:
    15. author='NULL'
    16. return author
    17.  
    18. def get_state(self,response):
    19. state=response.xpath('//p[@class="tag"]/span/text()').extract()[0]
    20. if len(state)>0:
    21. state=state.strip()
    22. else:
    23. st='NULL'
    24. return state
    25.  
    26. def get_type(self,response):
    27. type=response.xpath('//p[@class="tag"]/a/text()').extract()
    28. if len(type)>0:
    29. t=""
    30. for i in type:
    31. t+=' '+i
    32. type=t
    33. else:
    34. type='NULL'
    35. return type
    36.  
    37. def get_about(self,response):
    38. about=response.xpath('//p[@class="intro"]/text()').extract()[0]
    39. if len(about)>0:
    40. about=about.strip()
    41. else:
    42. about='NULL'
    43. return about
    44.  
    45. def get_score(self,response):
    46.  
    47. def get_sc(id):
    48. urll = 'https://book.qidian.com/ajax/comment/index?_csrfToken=ziKrBzt4NggZbkfyUMDwZvGH0X0wtrO5RdEGbI9w&bookId=' + id + '&pageSize=15'
    49. rr = requests.get(urll)
    50. # print(rr)
    51. score = rr.text[16:19]
    52. return score
    53.  
    54. bid=response.xpath('//a[@id="bookImg"]/@data-bid').extract()[0] #获取书的id
    55. if len(bid)>0:
    56. score=get_sc(bid) #调用方法获取评分 若是整数 可能返回 9,"
    57. if score[1]==',':
    58. score=score.
    
    相关教程