当前位置:   article > 正文

爬虫项目实战2——豆瓣电影影评爬取

爬虫项目实战2——豆瓣电影影评爬取

    众所周知,爬虫的常用工具分为三大类:re、bs4(BeautifulSoup4)以及xpath,不同的工具有不同的使用场景,首先详细介绍一下:

1. 正则表达式(re):

1.1 使用场景:

当需要处理简单的文本匹配、替换和提取时,可以使用正则表达式。例如,在文本中查找特定模式的字符串、替换文本中的特定字符等。

1.2 示例用途:

抓取网页中的特定数据、提取电子邮件地址、过滤无效或不必要的文本等。

2. BeautifulSoup4(bs4):

2.1 使用场景:

当需要从HTML或XML文档中提取特定标签、内容或属性时,可以使用BeautifulSoup4库。它提供了简单而灵活的API,方便地从文档中抽取所需的数据。

2.2 示例用途:

网页爬虫、数据抓取、数据清洗等。

3. XPath:

3.1 使用场景:

XPath是一种查询语言,用于在XML和HTML文档中定位和选择节点。它提供了一种简洁而强大的方式来解析文档和提取所需的信息。

3.2 示例用途:

从XML文档中提取特定的数据、通过选择器抓取特定元素等。

    ok,进入正题,这一篇爬虫代码往往会伴随着数据分析使用,数据分析后面再说,先说说这一篇代码。

    使用了简单的xpath方法,在代码开头使用了headers伪装了一下,防止被检测到是爬虫,随后就是xpath的经典请求方法,去匹配到最后要输出的用户名、评价星级和评价内容等数据,最后使用with语句,来定义输出的方式为检测文件夹(若没有该文件夹则新建),将爬取到的内容添加到text文件内。

    最后是需要注意的点,代码中并没有考虑到如果该文件夹内有文件,文件中有内容的情况。换句话说就是,如果已经爬取过一次输出了影评,第二次换一个id去爬取,不会出现覆盖的情况,这一点可以留给大家去思考一下该如何去定义和修改。话不多说,上代码:

  1. import os
  2. import requests
  3. from lxml import etree
  4. # 设置头部信息,防止被检测出是爬虫
  5. headers = {
  6. 'Host': 'movie.douban.com',
  7. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36',
  8. 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
  9. }
  10. id = input('请输入电影id:')
  11. page = int(input('请输入爬取的页数:'))
  12. # 循环请求接口
  13. for i in range(0, page):
  14. # 循环请求每页的数据
  15. re = requests.get(
  16. url='https://movie.douban.com/subject/%s/comments?start=%d&limit=20&sort=new_score&status=P' % (id, 20 * i),
  17. headers=headers).text
  18. # 构造了一个XPath解析对象并对HTML文本进行自动修正
  19. html = etree.HTML(re)
  20. # XPath使用路径表达式来选取用户名
  21. comment = html.xpath('//div[@class="comment"]')
  22. for content in comment:
  23. names = content.xpath('.//a[@class=""]')
  24. grades = content.xpath('.//span[contains(@class,"rating")]')
  25. texts = content.xpath('.//span[@class="short"]')
  26. name = names[0].xpath('./text()')[0]
  27. if len(grades) > 0:
  28. grade = grades[0].xpath('./@class')[0][7:8] + '星'
  29. else:
  30. grade = '暂无评价'
  31. text = texts[0].xpath('./text()')[0]
  32. # 文件夹不存在,则创建文件夹
  33. save_path = './douban'
  34. folder = os.path.exists(save_path)
  35. if not folder:
  36. os.makedirs(save_path)
  37. with open('./douban/影评.text', 'a+', encoding='utf-8') as f:
  38. f.write('用户名:%s\n' % name)
  39. f.write('评价:%s\n' % grade)
  40. f.write('评论内容:%s\n' % text)
  41. f.write('==========================================================================\n')

    代码已经附文件了,后续有问题和建议的欢迎大家叨扰。感谢支持!

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

闽ICP备14008679号