当前位置:   article > 正文

爬虫实战5:豆瓣读书爬取_douban reviews?start{}'.format(i*20)print('正在爬取第{}

douban reviews?start{}'.format(i*20)print('正在爬取第{}页'.format(i))

文章目录


前言

一、页面解析

第一步:本次爬取的内容是豆瓣网站上的读书标签,主要爬取的内容是文学下面的热门标签,涉及到的字段有

['大类别','小类别','类别数目','封面','书名','国家','作者','翻译人','出版社','出版日期','价格','评分','评价人数','简介']
 

第二步:对需要爬取的字段进行页面解析,右键检查元素,找到需要爬取的字段元素

二、代码展示

1.引入库

  1. import requests
  2. from lxml import etree
  3. import csv
  4. import time

2.代码书写

本次爬取的共有两个不同的页面,需要链接跳转到详细页面,构造跳转页面代码

  1. def get_parse(result):
  2. items = etree.HTML(result)
  3. # print(items)
  4. # 共6页,分为文学,流行,文化,生活,经管,科技
  5. for i in range(1, 7):
  6. item = items.xpath('//*[@id="content"]/div/div[1]/div[2]/div[{}]'.format(i))
  7. for it in item:
  8. # 归属大类
  9. category = it.xpath('./a/@name')[0]
  10. print(category)
  11. # 辅助列
  12. fuzhu = it.xpath('./table/tbody/tr')
  13. for its in fuzhu:
  14. try:
  15. for j in range(1, 50):
  16. # 小类型
  17. leixing = its.xpath('./td[{}]/a/text()'.format(j))[0]
  18. # 小类型链接
  19. lianjie = its.xpath('./td[{}]/a/@href'.format(j))[0]
  20. # 书籍数目
  21. shumu = its.xpath('./td[{}]/b/text()'.format(j))[0].strip('(').strip(')')
  22. print(leixing)
  23. print(lianjie)
  24. print(shumu)
  25. # 书籍解析
  26. get_content(category,leixing,lianjie,shumu)
  27. except:
  28. pass

接下来对详情页进行爬取,需要对字段进行判断爬取,其中中文书籍和外文书籍有所不同,多一个翻译字段,需要进行判断爬取

 

  1. def get_content(category,leixing,lianjie,shumu):
  2. D=[]
  3. # 最多展示50页
  4. for i in range(0, 50):
  5. time.sleep(1)
  6. print('+++++++++++++++++++++',i)
  7. # 链接
  8. # https://book.douban.com/tag/%E5%B0%8F%E8%AF%B4?start=40&type=T
  9. lianjie1 = 'https://book.douban.com/tag/' + leixing + '?start={}&type=T'.format(i * 20)
  10. print(lianjie1)
  11. response = requests.get(url=lianjie1, headers=headers)
  12. # print(response)
  13. items = etree.HTML(response.text)
  14. item = items.xpath('//*[@id="subject_list"]/ul/li')
  15. # print(item)
  16. for its in item:
  17. # 封面
  18. fengmian = its.xpath('./div[1]/a/img/@src')[0]
  19. # print(fengmian)
  20. # 书名
  21. shuming = its.xpath('./div[2]/h2/a/text()')[0]
  22. # 删除不需要的单元格
  23. shuming1 = shuming.replace('\n', '').replace('\t', '').strip()
  24. # 保存图片
  25. # save1(shuming1,fengmian)
  26. # print(shuming)
  27. # 辅助列
  28. fuzhu = its.xpath('./div[2]/div[1]/text()')[0]
  29. fuzhu = fuzhu.replace('\n', '').replace('\t', '').strip().split('/')
  30. # print(fuzhu)
  31. # print(len(fuzhu))
  32. if len(fuzhu) == 5:
  33. guojia=fuzhu[0].split(']')[0].strip('[')
  34. # print(guojia)
  35. # 作者
  36. zuozhe = fuzhu[0]
  37. # 翻译人
  38. fanyi = fuzhu[1].strip()
  39. # 出版社
  40. chuban = fuzhu[2].strip()
  41. # 出版日期
  42. riqi = fuzhu[3].strip()
  43. # 价格
  44. jiage = fuzhu[4].strip()
  45. # print(zuozhe)
  46. # print(fanyi)
  47. # print(chuban)
  48. # print(riqi)
  49. # print(jiage)
  50. elif len(fuzhu) == 4:
  51. # 国家
  52. guojia='中'
  53. # 作者
  54. zuozhe = fuzhu[0]
  55. fanyi = ''
  56. # 出版社
  57. chuban = fuzhu[1].strip()
  58. # 出版社日期
  59. riqi = fuzhu[2].strip()
  60. # 价格
  61. jiage = fuzhu[3].strip()
  62. guojia=guojia
  63. zuozhe=zuozhe
  64. fanyi=fanyi
  65. chuban=chuban
  66. riqi=riqi
  67. jiage=jiage
  68. # print(zuozhe)
  69. # print(fanyi)
  70. # print(chuban)
  71. # print(riqi)
  72. # print(jiage)
  73. # 评分
  74. pingfen = its.xpath('./div[2]/div[2]/span[2]/text()')[0]
  75. # print(pingfen)
  76. # 评价人数
  77. pingjiarenshu = its.xpath('./div[2]/div[2]/span[3]/text()')[0]
  78. pingjiarenshu=pingjiarenshu.replace('\n', '').replace('\t','').strip().strip('(').strip(')')
  79. # print(pingjiarenshu)
  80. # 书籍简介
  81. jianjie = its.xpath('./div[2]/p/text()')[0].replace('\n', '').replace('\t','')
  82. # print(jianjie)
  83. data=[category,leixing,shumu,fengmian,shuming1,guojia,zuozhe,fanyi,chuban,riqi,jiage,pingfen,pingjiarenshu,jianjie]
  84. print(data)
  85. D.append(data)
  86. save(D)

三.总结

 

在爬取时设计到的问题

(1)豆瓣字段限制,每个标签下面只能爬取到50页

(2)豆瓣IP反爬,豆瓣对IP进行了限制访问,如果需要大量爬取需要使用IP代理


更多精彩内容:关注公众号【有趣的数据】

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/191176
推荐阅读