爬虫小案例:豆瓣Top250电影

获取豆瓣Top250电影列表,然后给自己发邮件

直接上代码:

import requests,os,csv,time,smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
from email.header import Header
from email.header import  make_header
from email.mime.multipart import MIMEMultipart

from bs4 import BeautifulSoup

# 数据写入到文件
file_path = os.getcwd() + "/豆瓣Top250电影.csv"
if not os.path.isfile(file_path):
    # 编码utf-8-sig:支持python3,不支持python2
    with open(file_path, ‘w‘, newline=‘‘, encoding=‘utf-8-sig‘) as f:
        writer = csv.writer(f)
        writer.writerow([‘排名‘, ‘电影名称‘, ‘上映年份‘, ‘地区‘, ‘类型‘, ‘评分‘, ‘推荐语‘, ‘链接‘])
# 电影列表
filmlist = []
for x in range(10):
    url = ‘https://movie.douban.com/top250?start={}&filter=‘.format(x * 25)

    # 为躲避反爬机制,伪装成浏览器的请求头
    headers = {‘User-Agent‘:‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 OPR/65.0.3467.78 (Edition Baidu)‘}
    res = requests.get(url, headers=headers)
    if res.status_code == 200:
        print(‘正获取第{}页电影数据...‘.format(x+1))
        htmltext = res.text
        soup = BeautifulSoup(htmltext, ‘html.parser‘)
        ol = soup.find(‘ol‘, class_=‘grid_view‘)
        for li in ol.find_all(‘li‘):
            # 排名
            num = li.find(‘div‘, class_=‘pic‘).find(‘em‘).text

            info = li.find(‘div‘, class_=‘info‘)

            # 标题
            title = []
            title_spans = info.find(‘div‘, class_=‘hd‘).find(‘a‘).find_all(‘span‘)
            for title_span in title_spans:
                title.append(title_span.text)
            title = ‘‘.join(title)

            # 链接
            link = info.find(‘div‘, class_=‘hd‘).find(‘a‘)[‘href‘]

            # 评分
            rating_num = info.find(‘span‘, class_=‘rating_num‘).text

            # 推荐语
            inq = info.find(‘span‘, class_=‘inq‘).text

            # 上映时间、地区、类型
            bd = info.find(‘div‘, class_=‘bd‘).find(‘p‘).contents[2]
            bd = bd.split(‘/‘)

            # 保存到文件上
            with open(file_path, ‘a‘, newline=‘‘, encoding=‘utf-8-sig‘) as f:
                writer = csv.writer(f)
                writer.writerow([num, title, bd[0].strip(), bd[1].strip(), bd[2].strip(), rating_num, inq, link])

            filmlist.append("{0}.{1}:{2}/{3}/{4},评分:{5},推荐语:{6},链接:{7}".format(num,title,bd[0].strip(),bd[1].strip(),bd[2].strip(),rating_num,inq,link))

        time.sleep(0.75)
            # print(num)
            # print(title)
            # print(link)
            # print(rating_num)
            # print(inq)
            # print(bd)
            # print(‘{0}.{1} —— {2},推荐语:{3},链接:{4}‘.format(rating_num,title,inq,link))

    else:
        print(‘请求失败!‘)

# 发送邮件
my_sender = ‘xxx‘  # 发件人邮箱账号
my_pass = ‘xxx‘  # 发件人邮箱密码

try:
    print(time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime()) + ":准备发送邮件")

    # 创建一个带附件的实例
    # 使用多形式组合
    msg = MIMEMultipart()
    msg[‘From‘] = formataddr(["ljq", my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
    msg[‘To‘] = formataddr(["lsjljq", ‘[email protected]‘])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号

    # 邮件标题
    subject = ‘豆瓣Top250电影‘
    msg[‘Subject‘] = Header(subject, ‘utf-8‘)

    # 邮件正文内容
    contenttext = "\n".join(filmlist)
    msg.attach(MIMEText(contenttext, ‘plain‘, ‘utf-8‘))

    # 构造附件1,传送当前目录下的 test.txt 文件
    att1 = MIMEText(open(‘豆瓣Top250电影.csv‘, ‘rb‘).read(), ‘base64‘, ‘utf-8‘)
    # 文件名如果是中文,则需要转化一下
    att1["Content-Type"] = ‘application/octet-stream;name="{0}"‘.format(make_header([(‘豆瓣Top250电影‘, ‘UTF-8‘)]).encode(‘UTF-8‘))
    # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
    att1["Content-Disposition"] = ‘attachment; filename="{0}.csv"‘.format(make_header([(‘豆瓣Top250电影‘, ‘UTF-8‘)]).encode(‘UTF-8‘))
    msg.attach(att1)

    print(time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime()) + ":正连接邮件服务器...")
    server = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465)  # 发件人邮箱中的SMTP服务器,端口是25
    print(time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime()) + ":登录中...")
    server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
    print(time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime()) + ":正在发送邮件...")
    server.sendmail(my_sender, [‘[email protected]‘], msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
    server.quit()  # 关闭连接
    print(‘邮件发送成功!‘)
except Exception as err:
    print(‘邮件发送失败!:{0}‘.format(err))

原文地址:https://www.cnblogs.com/KeenLeung/p/12157923.html

时间: 2024-11-05 20:36:12

爬虫小案例:豆瓣Top250电影的相关文章

python爬虫--爬取豆瓣top250电影名

关于模拟浏览器登录的header,可以在相应网站按F12调取出编辑器,点击netwook,如下: 以便于不会被网站反爬虫拒绝. 1 import requests 2 from bs4 import BeautifulSoup 5 def get_movies(): 6 headers = { 7 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrom

爬虫实践二--豆瓣top250电影

import requests def get_movies(): headers={ 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36', 'Host': 'movie.douban.com' } for i in range(0,10): link = 'https://movie.do

[python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对比,你可以进一步加深Python爬虫的印象.同时,文章给出了我以前关于爬虫的基础知识介绍,方便新手进行学习.        总之,希望文章对你有所帮助,如果存在不错或者错误的地方,还请海涵~ 一. DOM树结构分析 豆瓣Top250电影网址:https://movie.douban.com/top2

python爬虫,爬豆瓣top250电影

python爬虫,爬豆瓣top250电影 import string import re import urllib2 class DouBanSpider(object) : def __init__(self) : self.page = 1 self.cur_url = "http://movie.douban.com/top250?start={page}&filter=&type=" self.datas = [] self._top_num = 1 def

Scrapy项目 - 数据简析 - 实现豆瓣 Top250 电影信息爬取的爬虫设计

一.数据分析截图(weka数据分析截图 ) 本例实验,使用Weka 3.7对豆瓣电影网页上所罗列的上映电影信息,如:标题.主要信息(年份.国家.类型)和评分等的信息进行数据分析,Weka 3.7数据分析如下所示: 图1-1  数据分析主界面 图1-2  OneR数据分析界面 图1-3  ZeroR数据分析界面 图1-4 Visualize数据分析界面 二.数据分析结论:(将数据之间的关系用文字性描述) 如图2-1所示,显而易见,电影类型的趋势增量随着标题的繁杂而日益增长,仅对于整个国家层次来说,

网络爬虫小案例_2017/3/10

今晚,了解了一下网络爬虫,那么什么是网络爬虫呢? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常被称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本,已被广泛应用于互联网领域.搜索引擎使用网络爬虫抓取Web网页.文档甚至图片.音频.视频等资源,通过相应的索引技术组织这些信息,提供给搜索用户进行查询.网络爬虫也为中小站点的推广提供了有效的途径,网站针对搜索引擎爬虫的优化曾风靡一时. 网络爬虫的基本工作流程如下:     1.首先选取一部分精心挑选的种子U

团队-爬取豆瓣Top250电影-开发文档

项目托管平台地址:https://gitee.com/wangdating/movie250开发内容: 首先我们选择使用Python脚本语言开发这个项目 代码:1.使用python的request库先获取网页内容下来(目标网址首页 url: https://movie.douban.com/top250) 2.解析html文件,提取出我们要提取的信息

爬虫小案例 爬取(妹子图片)

import requests #请求库 from bs4 import BeautifulSoup #网页解析库 def get_girl(url): #伪造请求头信息 header = { #用户代理 'User-Agent':"Mozilla/5.0(Windows NT 6.1;WOW64) AppleWebKit/537.1(KHTML,like Gecko) Chrome/22.0.1207.1 Safari/537.1", #上个页面的url 'referer‘:'htt

团队-爬取豆瓣Top250电影-团队-阶段互评

团队名称:咣咣踹电脑学号:2015035107217姓名:耿文浩 得分10 原因:组长带领的好,任务分配的好,积极帮助组员解决问题学号:2015035107213姓名:周鑫 得分8 原因:勇于分担,积极完成任务学号:2015035107210姓名:张文博 得分 9 原因:态度认真负责学号:2015035107196姓名:王梓萱 得分9 原因:态度积极,帮助他人学号:2015035107202姓名:杨继尧 得分8 原因:有不懂的地方,还有提高的能力学号:2015035107218姓名:张永康 得分