豆瓣即将上映电影爬虫作业

https://study.163.com/course/courseLearn.htm?courseId=1005913008#/learn/text?lessonId=1053258283&courseId=1005913008

把豆瓣“即将上映”的电影爬出来。

很简陋的代码,现在的知识只能写这样了,做个记录吧。以后有能力再完善。

 1 # coding=gbk
 2 #  豆瓣即将上映的电影
 3 # https://movie.douban.com/cinema/later/changsha/爬取这个页面的信息吧
 4 
 5 import requests
 6 from bs4 import BeautifulSoup
 7 import json
 8 
 9 
10 def get_page():
11     url = 'https://movie.douban.com/cinema/later/changsha/'
12     headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}
13     response = requests.get(url, headers, verify=False)
14     text = response.text
15     return text
16 
17 
18 def get_data(text):
19     movies = []
20     soup = BeautifulSoup(text, 'lxml')
21     # class="item mod " class="item mod odd"有两个都是的。
22     # 第一种思路,直接分开成两个来处理
23     divList1 = soup.find_all('div', attrs={'class': "item mod "})
24     divList2 = soup.find_all('div', attrs={'class': "item mod odd"})
25     # 合并两个list
26     divList = divList1+divList2
27     '''
28     <div class="item mod ">
29 <a class="thumb" href="https://movie.douban.com/subject/26394152/">
30 <img class="" src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2541662397.jpg"/>
31 </a>
32 <div class="intro">
33 <h3>
34 <a class="" href="https://movie.douban.com/subject/26394152/">大黄蜂</a>
35 <span class="icon"></span>
36 </h3>
37 <li class="dt">01月04日</li>
38 <li class="dt">动作 / 科幻 / 冒险</li>
39 <li class="dt">美国</li>
40 </div>'''
41     for div in divList:
42         movie = {}
43         thumb = div.find('img')['src']
44         # print(thumb)
45         # 获取所有a标签,其中第二个a标签里是电影名
46         title = div.find_all('a')[1].text
47         # print(title)
48         # 有些电影里没有类型这列,所有要考虑下,不能直接赋值类型
49         li_tag = div.find_all('li')
50         if len(li_tag)==4:
51             date = li_tag[0].text
52             type = li_tag[1].text
53             area = li_tag[2].text
54             want = li_tag[3].text
55         else:
56             date = li_tag[0].text
57             type = ''
58             area = li_tag[1].text
59             want = li_tag[2].text
60 
61         # print(date)
62         movie['title'] = title
63         movie['thumb'] = thumb
64         movie['date'] = date
65         movie['type'] = type
66         movie['area'] = area
67         movie['want'] = want
68         movies.append(movie)
69     return movies
70 
71 
72 def save_text(data):
73     with open('douban2.json', 'w', encoding='utf-8') as fp:
74         json.dump(data, fp, ensure_ascii=False)
75 
76 
77 if __name__ == '__main__':
78     text = get_page()
79     data = get_data(text)
80     save_text(data)

 

两个li标签的区别

或者以后可以参考https://www.jianshu.com/p/c64fe2a20bc9,这个代码写的可以借鉴。

转载于:https://www.cnblogs.com/weiwei2016/p/10162660.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用Scrapy框架爬取豆瓣即将上映电影的步骤: 1. 创建Scrapy项目 在命令行中执行以下命令: ``` scrapy startproject douban_movie ``` 2. 创建Spider 在命令行中执行以下命令: ``` scrapy genspider movie_spider movie.douban.com ``` 这里我们以`movie_spider`为Spider名称,以豆瓣电影即将上映页面(https://movie.douban.com/cinema/later/)为起始URL。 3. 编写Spider代码 打开`douban_movie/spiders/movie_spider.py`文件,修改`start_urls`和`parse`方法如下: ```python import scrapy class MovieSpider(scrapy.Spider): name = 'movie_spider' allowed_domains = ['movie.douban.com'] start_urls = ['https://movie.douban.com/cinema/later/'] def parse(self, response): for movie in response.css('.intro'): yield { 'title': movie.css('.title a::text').get(), 'date': movie.css('.date::text').get(), 'link': movie.css('.title a::attr(href)').get(), } ``` 解释一下代码: - `allowed_domains`属性指定了Spider可以爬取的域名; - `start_urls`属性指定了Spider的起始URL; - `parse`方法是Scrapy处理响应的默认方法,它接收响应作为参数,并返回一个可迭代的对象; - `response.css('.intro')`表示获取响应中所有class为`intro`的元素; - `movie.css('.title a::text').get()`表示获取`movie`元素内class为`title`的`a`标签的文本; - `movie.css('.date::text').get()`表示获取`movie`元素内class为`date`的文本; - `movie.css('.title a::attr(href)').get()`表示获取`movie`元素内class为`title`的`a`标签的`href`属性值。 4. 运行Spider 在命令行中执行以下命令: ``` scrapy crawl movie_spider -o movies.json ``` 这里使用了`-o`参数将爬取结果保存为JSON格式,保存在当前目录下的`movies.json`文件中。 5. 查看结果 打开`movies.json`文件,可以看到爬取到的豆瓣即将上映电影信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值