打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python爬虫入门案例(一)豆瓣电影Top250爬取(request+XPath+csv)

豆瓣电影top250是学习爬虫很好的入门案例。学习爬虫,首先我们应该清楚爬虫的流程。

一、流程分析

  • 1.访问网页, 获取网页回应(response)
    2.分析源码结构,通过xpath或其他解析方法获得所需的相应信息内容。
    3.通过csv方法将获取的内容存入文件中(新手可以先存入txt文件,这种方法比较简单)

二、代码实现与思路讲解

  1. 设置headers,设置编码解析格式,通过requests中的get方法获取网页回应。
    headers查看方式:
    进入网页,点击f12或查看开发者工具,点击Network-headers-User-Agent

def get_response(url):    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3534.4 Safari/537.36'}    response = requests.get(url,headers=headers)    response.encoding = 'UTF-8'    return response.text

**

2.分析源码


通过查看源码,可以看出每个电影都是放置在li标签中的,这样我们就非常清晰。

def get_nodes(html):    text = etree.HTML(html)    nodes = text.xpath('//li/div[@class="item"]')  #锁定代码位置    infos = []    for node in nodes:        try:            key = {}            key['movieName'] = str(node.xpath('.//span[@class="title"][1]/text()')).strip("[']")            print(key['movieName'])            firstInfo = node.xpath('.//div[@class="bd"]/p/text()')[0]            secondInfo = node.xpath('.//div[@class="bd"]/p/text()')[1]            key['director'] = str(firstInfo.split("主演:")[0]).strip().strip('导演:')            key['actors'] = firstInfo.split("主演:")[1]            key['time'] = secondInfo.split('/')[0]            key['country'] = secondInfo.split('/')[1]            infos.append(key)        except:            key['actors'] = None    return infos

这样我们就可以爬取到电影名,导演,主演,上映时间,国家等电影信息。(如果对xpath语法有问题的同学可以去w3school官网去查看。语法相当简单好学)

3. 将信息写入csv文件

def save_file(infos):    headers = ['电影名称','导演','主演','上映时间','国家']    with open('DouBanMovieT250.csv','a+',encoding='UTF-8',newline='') as fp:        writer = csv.writer(fp)        writer.writerow(headers)        for key in infos:            writer.writerow([key['movieName'],key['director'],key['actors'],key['time'],key['country']])

这里我们先通过csv.writer(fp)方法生成一个csv对象。再通过这个对象来调用writerrow方法写入文件。到这里我们就完成了第一页的爬虫。
当然,我们的欲望不止爬取第一页。下面我们再来说一下翻页爬取。

if __name__  == '__main__':    urls = ['https://movie.douban.com/top250?start={}'.format(i) for i in range(0, 226, 25)]    for url in urls:        html = get_response(url)        infos = get_nodes(html)        save_file(infos)

通过查看网页的get请求可以知道,参数是固定变化的。这样我们直接可以通过for循环来遍历网页请求参数。


到这里,我们的豆瓣电影就爬取完成了。来看一下结果吧!

完整代码

import requestsfrom lxml import etreeimport csvdef get_response(url):    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3534.4 Safari/537.36'}    response = requests.get(url,headers=headers)    response.encoding = 'UTF-8'    return response.textdef get_nodes(html):    text = etree.HTML(html)    nodes = text.xpath('//li/div[@class="item"]')    infos = []    for node in nodes:        try:            key = {}            key['movieName'] = str(node.xpath('.//span[@class="title"][1]/text()')).strip("[']")            print(key['movieName'])            firstInfo = node.xpath('.//div[@class="bd"]/p/text()')[0]            secondInfo = node.xpath('.//div[@class="bd"]/p/text()')[1]            key['director'] = str(firstInfo.split("主演:")[0]).strip().strip('导演:')            key['actors'] = firstInfo.split("主演:")[1]            key['time'] = secondInfo.split('/')[0]            key['country'] = secondInfo.split('/')[1]            infos.append(key)        except:            key['actors'] = None    return infosdef save_file(infos):    headers = ['电影名称','导演','主演','上映时间','国家']    with open('DouBanMovieT250.csv','a+',encoding='UTF-8',newline='') as fp:        writer = csv.writer(fp)        writer.writerow(headers)        for key in infos:            writer.writerow([key['movieName'],key['director'],key['actors'],key['time'],key['country']])if __name__  == '__main__':    urls = ['https://movie.douban.com/top250?start={}'.format(i) for i in range(0, 226, 25)]    for url in urls:        html = get_response(url)        infos = get_nodes(html)        save_file(infos)

每天进步一点点,Keep Going!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
从豆瓣的反爬说说自建代理池
实战|手把手教你用Python爬虫(附详细源码)
Python爬虫抓取名人名言网站
大佬们,帮忙看看这个网络爬虫代码怎么修改?
PYTHON极简主义爬虫——豆瓣图书爬取实战
Python|简单爬取豆瓣网电影信息
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服