设为首页 收藏本站
查看: 1378|回复: 0

[经验分享] 转载—Python抓取豆瓣电影

[复制链接]

尚未签到

发表于 2018-8-6 10:38:27 | 显示全部楼层 |阅读模式
#!/usr/bin/python  
# -*-coding:utf-8-*-
  
# Python:   2.7
  
# Program:  爬取豆瓣电影
  

  
from bs4 import BeautifulSoup
  
import urllib2, json, random, sys
  

  
reload(sys)
  
sys.setdefaultencoding('utf-8')
  

  
def get_data(url):
  
    my_headers = [
  
        'Mozilla/5.0 (Windows NT 5.2) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30',
  
        'Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0',
  
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)',
  
        'Opera/9.80 (Windows NT 5.1; U; zh-cn) Presto/2.9.168 Version/11.50',
  
        'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1',
  
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)']
  
    header = {"User-Agent": random.choice(my_headers)}
  
    req = urllib2.Request(url, headers=header)
  
    html = urllib2.urlopen(req).read()
  
    data = json.loads(html)['data']
  
    return data
  

  
def get_movieInfo(url):
  
    my_headers = [
  
        'Mozilla/5.0 (Windows NT 5.2) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30',
  
        'Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0',
  
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)',
  
        'Opera/9.80 (Windows NT 5.1; U; zh-cn) Presto/2.9.168 Version/11.50',
  
        'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1',
  
        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)']
  
    header = {"User-Agent": random.choice(my_headers)}
  
    req = urllib2.Request(url, headers=header)
  
    html = urllib2.urlopen(req).read()
  
    soup = BeautifulSoup(html, 'html.parser')
  
    movie = {}
  
    movie['Name'] = soup.find('span',property="v:itemreviewed").text
  
    movie['Year'] = soup.find('span',class_='year').text
  
    movie['Rate'] = soup.find('strong', property="v:average").text
  
    movie['Runtime'] = soup.find('span', property="v:runtime").text
  
    movie['Summary'] = soup.find('span', property='v:summary').text
  
    movie['URL'] = url
  

  
    movie['Directors'] = ''
  
    directors = soup.find_all('a', rel="v:directedBy")
  
    for director in directors:
  
        movie['Directors'] += director.text
  
        movie['Directors'] += '  '
  

  
    movie['Stars'] = ''
  
    stars = soup.find_all('a', rel="v:starring")
  
    for star in stars:
  
        movie['Stars'] += star.text
  
        movie['Stars'] += '  '
  

  
    movie['Category'] = ''
  
    categorys = soup.find_all('span', property="v:genre")
  
    for category in categorys:
  
        movie['Category'] += category.text
  
        movie['Category'] += '  '
  

  
    return movie
  

  
def get_urls():
  
    base_url = 'https://movie.douban.com/j/new_search_subjects?sort=R&range=1,10&tags=%E7%94%B5%E5%BD%B1&start='
  
    urls=[]
  
    nu = 0
  
    while True:
  
        print nu
  
        url = base_url + str(nu)
  
        data = get_data(url)
  
        if len(data) == 0:
  
            break
  
        for i in data:
  
            urls.append(i['url'])
  
        nu += 20
  
    return urls
  

  
if __name__ == '__main__':
  
    urls = get_urls()
  
    f = open('movieinfo.txt','w+')
  
    for url in urls:
  
        try:
  
            movie = get_movieInfo(url)
  
            movie_str = json.dumps(movie,ensure_ascii=False, encoding='UTF-8')
  
            f.write(movie_str)
  
            f.write('\n')
  
            f.flush()
  
        except:
  
            print url
  
            continue
  
    f.close()

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-547480-1-1.html 上篇帖子: Python作业-选课系统 下篇帖子: Python高级:细说Python浅拷贝和深拷贝
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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