python爬虫|爬取豆瓣电影TOP250并写入txt中

   

在mooc上学习了python爬虫,就像自己写一个试试,正好自己也对电影方面感兴趣,所以做了一个关于豆瓣的爬虫。

python版本:3.6

工具:IDLE

爬取内容:TOP250电影的排名,名称,评分

选取网站:https://movie.douban.com/top250

python爬虫|爬取豆瓣电影TOP250并写入txt中_第1张图片

查看源代码(截取部分):

python爬虫|爬取豆瓣电影TOP250并写入txt中_第2张图片

通过这里找到所需提取的信息,编写正则表达式

reRank = r'(.*)'
reTitle = r'(.[^&]*?)'
reStar = r'"v:average">(.*?)'
接下来开始编写程序

关于引用的包

#coding : utf-8
import requests
import re
import bs4

获取网页html内容

设置header和timeout

def getHTMLText(url):
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400'
        ,
        'Cookie': 'bid=I0klBiKF3nQ; ll="118277"; gr_user_id=ffdf2f63-ec37-49b5-99e8-0e0d28741172; ap=1; _vwo_uuid_v2=8C5B24903B1D1D3886FE478B91C5DE97|7eac18658e7fecbbf3798b88cfcf6113; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1498305874%2C%22https%3A%2F%2Fbook.douban.com%2Ftag%2F%25E9%259A%258F%25E7%25AC%2594%3Fstart%3D20%26type%3DT%22%5D; _pk_id.100001.4cf6=4e61f4192b9486a8.1485672092.5.1498306809.1498235389.; _pk_ses.100001.4cf6=*'

    }
    try:
        r = requests.get(url,headers,timeout = 30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""
获取BeautifulSoup对象,并通过正则匹配提取所需信息并写入txt文件
def get_data(html):
    bsobj = bs4.BeautifulSoup(html,'html.parser')
    #获取电影标题
    reTitle = r'(.[^&]*?)'
    titleList = re.findall(reTitle,html)
    #获取电影评分
    reStar = r'"v:average">(.*?)'
    starList = re.findall(reStar,html)
    #获取电影排名
    reRank = r'(.*)'
    rankList = re.findall(reRank,html)

    count = 0
    tplt = "{0:^10}\t{1:{3}<10}\t{2:^18}\n"#定义写入模板
    with open('filmlist.txt','a') as f:
        while count<25:#输出每一页的结果
            f.write(tplt.format(rankList[count],titleList[count],starList[count],chr(12288)))
            count += 1
    #while count<25:
        #print('排名:',rankList[count],'\t电影:',titleList[count],'\t评分:',starList[count])
        #print('\n')
        #count += 1
这里我曾经分别尝试过直接print结果以测试程序,后采用with打开文件并写入,为避免txt内容因循环写入被覆盖将参数设置为'a'

调用函数,运行程序

if __name__=="__main__":
    f = open('filmlist.txt','w')
    f.write('')#清空原文件内容
    f.close()
    tplt = "{0:^10}\t{1:{3}^10}\t{2:^18}\n"#定义写入模板
    with open('filmlist.txt','a') as f:
        f.write(tplt.format("排名","电影","评分",chr(12288)))
    
    page = 0
    base_url = 'https://movie.douban.com/top250?start='
    while page<10:
        url = base_url + str(25*page)
        html = getHTMLText(url)
        result = get_data(html)
        page += 1
    print("All Done !!!")
对于页数问题定义变量page随循环自增并更新url

最后运行结果:

python爬虫|爬取豆瓣电影TOP250并写入txt中_第3张图片   python爬虫|爬取豆瓣电影TOP250并写入txt中_第4张图片


你可能感兴趣的:(python爬虫|爬取豆瓣电影TOP250并写入txt中)