ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

一个豆瓣电影Top250爬虫

2022-06-25 00:34:37  阅读:246  来源: 互联网

标签:xpath movie 爬虫 豆瓣 text each import div Top250


一个爬虫

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

https://movie.douban.com/top250

模块

import requests #用于发送请求
import re #使用正则表达式,用于匹配处理文本
import os #用于创建文件夹
from lxml import etree #这里我使用了Xpath表达式用于数据解析,我觉得这个模块比BeautifulSoup好用,强烈推荐
from fake_useragent import UserAgent #反爬虫,随机获取浏览器 UA 信息

代码

import requests
import re
import os
from lxml import etree
from fake_useragent import UserAgent


class doubanSpider(object):
    def __init__(self):
        if not os.path.exists('db/douban'):
            os.makedirs('db/douban')
        else:
            pass
        self.f = open('./db/douban/douban.txt', 'a', encoding='utf-8')

    def start(self):
        for i in range(46):
            headers = {
                'User-Agent': UserAgent().random
            }
            url = 'https://movie.douban.com/top250?start=' + str(i * 25)
            r = requests.get(url, headers=headers)
            html = etree.HTML(r.text)
            li_list = html.xpath('//*[@id="content"]/div/div[1]/ol/li')
            movies = []
            for each in li_list:
                movie = {}
                order = each.xpath('.//div/div[1]/em/text()')[0]
                movie['id'] = order
                cover = each.xpath('.//div/div[1]/a/img/@src')[0]
                movie['cover'] = cover
                name = each.xpath('.//div/div[2]/div[1]/a/span/text()')
                flag = ''
                for mo in name:
                    flag += mo
                movie['name'] = flag
                info = each.xpath('.//div/div[2]/div[2]/p[1]/text()[1]')[0].strip()
                info = info.replace("\n", "")
                info = info.replace("\xa0", "")
                director = re.findall(r'[导演:].+[主演:]', info)[0]
                director = director[4:len(director) - 3]
                movie['director'] = director
                try:
                    role = re.findall(r'主.+', info)[0]
                    role = role[4:]
                except IndexError:
                    role = ''
                movie['role'] = role
                plot = each.xpath('.//div/div[2]/div[2]/p[1]/text()[2]')[0].strip()
                plot = plot.replace("\xa0", "")
                movie['plot'] = plot
                star = each.xpath('.//div/div[2]/div[2]/div/span[2]/text()')[0]
                movie['star'] = star
                try:
                    comment = each.xpath('.//div/div[2]/div[2]/p[2]/span/text()')[0]
                except IndexError:
                    comment = ''
                movie['comment'] = comment
                movies.append(movie)
                self.f.write(str(movie)+'\n')
                print(movie)

    def run(self):
        self.start()
        self.f.close()


if __name__ == '__main__':
    spider = doubanSpider()
    spider.run()

标签:xpath,movie,爬虫,豆瓣,text,each,import,div,Top250
来源: https://www.cnblogs.com/ouhouyi/p/16410564.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有