一个豆瓣电影Top250爬虫

打印 上一主题 下一主题

主题 629|帖子 629|积分 1887

一个爬虫

这是我第一次接触爬虫,写的第一个爬虫实例。

https://movie.douban.com/top250
模块
  1. import requests #用于发送请求
  2. import re #使用正则表达式,用于匹配处理文本
  3. import os #用于创建文件夹
  4. from lxml import etree #这里我使用了Xpath表达式用于数据解析,我觉得这个模块比BeautifulSoup好用,强烈推荐
  5. from fake_useragent import UserAgent #反爬虫,随机获取浏览器 UA 信息
复制代码
代码
  1. import requests
  2. import re
  3. import os
  4. from lxml import etree
  5. from fake_useragent import UserAgent
  6. class doubanSpider(object):
  7.     def __init__(self):
  8.         if not os.path.exists('db/douban'):
  9.             os.makedirs('db/douban')
  10.         else:
  11.             pass
  12.         self.f = open('./db/douban/douban.txt', 'a', encoding='utf-8')
  13.     def start(self):
  14.         for i in range(46):
  15.             headers = {
  16.                 'User-Agent': UserAgent().random
  17.             }
  18.             url = 'https://movie.douban.com/top250?start=' + str(i * 25)
  19.             r = requests.get(url, headers=headers)
  20.             html = etree.HTML(r.text)
  21.             li_list = html.xpath('//*[@id="content"]/div/div[1]/ol/li')
  22.             movies = []
  23.             for each in li_list:
  24.                 movie = {}
  25.                 order = each.xpath('.//div/div[1]/em/text()')[0]
  26.                 movie['id'] = order
  27.                 cover = each.xpath('.//div/div[1]/a/img/@src')[0]
  28.                 movie['cover'] = cover
  29.                 name = each.xpath('.//div/div[2]/div[1]/a/span/text()')
  30.                 flag = ''
  31.                 for mo in name:
  32.                     flag += mo
  33.                 movie['name'] = flag
  34.                 info = each.xpath('.//div/div[2]/div[2]/p[1]/text()[1]')[0].strip()
  35.                 info = info.replace("\n", "")
  36.                 info = info.replace("\xa0", "")
  37.                 director = re.findall(r'[导演:].+[主演:]', info)[0]
  38.                 director = director[4:len(director) - 3]
  39.                 movie['director'] = director
  40.                 try:
  41.                     role = re.findall(r'主.+', info)[0]
  42.                     role = role[4:]
  43.                 except IndexError:
  44.                     role = ''
  45.                 movie['role'] = role
  46.                 plot = each.xpath('.//div/div[2]/div[2]/p[1]/text()[2]')[0].strip()
  47.                 plot = plot.replace("\xa0", "")
  48.                 movie['plot'] = plot
  49.                 star = each.xpath('.//div/div[2]/div[2]/div/span[2]/text()')[0]
  50.                 movie['star'] = star
  51.                 try:
  52.                     comment = each.xpath('.//div/div[2]/div[2]/p[2]/span/text()')[0]
  53.                 except IndexError:
  54.                     comment = ''
  55.                 movie['comment'] = comment
  56.                 movies.append(movie)
  57.                 self.f.write(str(movie)+'\n')
  58.                 print(movie)
  59.     def run(self):
  60.         self.start()
  61.         self.f.close()
  62. if __name__ == '__main__':
  63.     spider = doubanSpider()
  64.     spider.run()
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小小小幸运

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表