python爬虫 豆瓣电影top250
2019-03-06 16:13
986 查看
原始网页
找到请求地址,发起请求
查看网页源码,定位需要爬取的内容标签
根据标签提取内容
提取结果
多获取一些数据
提取排名、外文名和别名
提取结果
再爬取一个详细页的链接
打印一下
再进入到电影的详情页面中去爬取电影介绍
先找到源码标签位置
另外定义一个函数来爬取详情页面
请求刚刚在列表页爬取的电影详情页的链接
用xpath提取出简介部分
提取出来会有特殊符号和大段空格
使用html.escape 把html里的特殊符号解析出来,再用strip去除空格
在刚刚的for循环里调用这个函数,传入链接
打印数据:
现在只获取了第一页数据,把当前写的代码封装成函数,继续爬取剩余页面
根据观察,每页的url地址是有规律的,总共10页,直接生成url列表
全部实现后打印效果
总共250条数据
增加评分爬取
以下是完整代码:
开发工具pycharm
编译器版本:python3.6
需要装的包:requests, lxml, html
import requests from lxml import etree import html # 准备数据 # url = "https://movie.douban.com/top250" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36" } def detail_page_spider(detail_url): d_response = requests.get(detail_url,headers=headers) # 创建xpath对象 d_eroot = etree.HTML(d_response.text) detail_summary_list = d_eroot.xpath('//span[@class="all hidden"]/text()') if not detail_summary_list: detail_summary_list = d_eroot.xpath('//span[@property="v:summary"]/text()') # 处理数据 for paragraph in detail_summary_list: clean_para = html.escape(paragraph).strip() print(clean_para) def get_one_page(url): # 获得响应对象 response = requests.get(url,headers) # 创建xpath对象 eroot = etree.HTML(response.text) # 匹配出电影的xpath元素列表,每个电影为一个元素 element_list = eroot.xpath('//div[@class="item"]') print('排名---中文名---外文名---别名') # 遍历元素列表,对每一个元素再进行处理 for i in element_list: star = i.xpath('.//div[@class="star"]/span[2]/text()')[0] num = i.xpath('./div/em/text()')[0] detail_link = i.xpath('./div/a/@href')[0] cn_name = i.xpath('./div[@class="info"]/div/a/span[1]/text()')[0] # 获取中文名,每个电影都有,直接从列表中取出字符串 en_name = i.xpath('./div[@class="info"]/div/a/span[2]/text()') # 获取英文名,不一定有,加一个判断,如果没有的话给一个默认值 if not en_name: en_name = '无' else: en_name = en_name[0].strip(' / ') # 如果有的话,去除获取内容中的两个空格,使数据看起来干净 en_name= en_name.strip() en_name= en_name.strip('/') en_name= en_name.strip() other_name = i.xpath('./div[@class="info"]/div/a/span[@class="other"]/text()') # 获取别名,同上 if not other_name: other_name = '无' else: other_name = other_name[0].strip(' / ') other_name = other_name.strip() other_name = other_name.strip('/') other_name = other_name.strip() print(num,'---',cn_name,'---',en_name,'---',other_name,'---评分',star,'---',detail_link,) detail_page_spider(detail_link) print('*'*100) break def generate_url(): # 生成所有url地址列表 url_list = [] for i in range(0,226,25): url_raw = 'https://movie.douban.com/top250?start={}'.format(i) url_list.append(url_raw) # print(url_list) return url_list if __name__ == '__main__': url_list = generate_url() for url_w in url_list: get_one_page(url_w) break
相关文章推荐
- Python爬虫——豆瓣电影Top250
- 运维学python之爬虫高级篇(五)scrapy爬取豆瓣电影TOP250
- Python爬虫实战——豆瓣电影top250
- 实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
- [Python/爬虫]利用xpath爬取豆瓣电影top250
- Python爬虫小案例:豆瓣电影TOP250
- [python爬虫入门]爬取豆瓣电影排行榜top250
- [Python爬虫]1.豆瓣电影Top250
- Python爬虫一:抓取豆瓣电影Top250
- Python爬虫获取豆瓣电影TOP250
- Python爬虫初学(2)豆瓣电影top250评论数
- Python爬虫初学(1)豆瓣电影top250评论数
- 实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
- [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息
- python 爬虫 保存豆瓣TOP250电影海报及修改名称
- Python 采用Scrapy爬虫框架爬取豆瓣电影top250
- 1.【python爬虫学习笔记】爬取豆瓣电影top250
- 萌新的Python学习日记 - 爬虫无影 - 爬取豆瓣电影top250并入库:豆瓣电影top250
- python爬虫(一)爬取豆瓣电影Top250
- python3[爬虫基础入门实战] 爬取豆瓣电影排行top250