python爬虫初探

爬取前50名豆瓣电影:

废话少说,直接上代码!

import re

import requests
from bs4 import BeautifulSoup

def get_content(url,):
   try:
       user_agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 Safari/537.36"
       response = requests.get(url,  headers={'User-Agent': user_agent})
       response.raise_for_status()   # 如果返回的状态码不是200, 则抛出异常;
       response.encoding = response.apparent_encoding  # 判断网页的编码格式, 便于respons.text知道如何解码;
   except Exception as e:
       print("爬取错误")
   else:

       print(response.url)
       print("爬取成功!")
       return  response.content

def parser_content(htmlContent):
   # 实例化soup对象, 便于处理;
   soup = BeautifulSoup(htmlContent, 'html.parser')
   # 1). 电影信息存储在ol标签里面的li标签:
   # <ol class="grid_view">
   olObj = soup.find_all('ol', class_='grid_view')[0]

   # 2). 获取每个电影的详细信息, 存储在li标签;
   details = olObj.find_all('li')


   for detail in details:
       # # 3). 获取电影名称;
       movieName = detail.find('span', class_='title').get_text()

       # 4). 电影评分:
       movieScore = detail.find('span', class_='rating_num').get_text()

       # 5). 评价人数***************
       # 必须要转换类型为字符串
       movieCommentNum = str(detail.find(text=re.compile('\d+人评价')))


       # 6). 电影短评
       movieCommentObj = detail.find('span', class_='inq')
       if movieCommentObj:
           movieComment = movieCommentObj.get_text()
       else:
           movieComment = "无短评"

       movieInfo.append((movieName, movieScore, movieCommentNum, movieComment))




import openpyxl


def create_to_excel(wbname, data, sheetname='Sheet1', ):
   """
  将制定的信息保存到新建的excel表格中;

  :param wbname:
  :param data: 往excel中存储的数据;
  :param sheetname:
  :return:
  """

   print("正在创建excel表格%s......" % (wbname))

   # wb = openpyxl.load_workbook(wbname)
   # 如果文件不存在, 自己实例化一个WorkBook的对象;
   wb = openpyxl.Workbook()
   # 获取当前活动工作表的对象
   sheet = wb.active
   # 修改工作表的名称
   sheet.title = sheetname
   # 将数据data写入excel表格中;
   print("正在写入数据........")
   for row, item in enumerate(data):  # data发现有4行数据, item里面有三列数据;
       print(item)
       for column, cellValue in enumerate(item):

           # cell = sheet.cell(row=row + 1, column=column + 1, value=cellValue)
           cell = sheet.cell(row=row+1, column=column + 1)
           cell.value = cellValue

   wb.save(wbname)
   print("保存工作薄%s成功......." % (wbname))


if __name__ == '__main__':
   doubanTopPage = 2
   perPage = 25
   # [(), (), ()]
   movieInfo = []
   # 1, 2, 3 ,4, 5
   for page in range(1, doubanTopPage+1):
       # start的值= (当前页-1)*每页显示的数量(25)
       url = "https://movie.douban.com/top250?start=%s" %((page-1)*perPage)
       content = get_content(url)
       parser_content(content)


   create_to_excel('/tmp/hello.xlsx', movieInfo, sheetname="豆瓣电影信息")

如果你是直接复制粘贴的,那你这里一定会出现一大串儿红字

解决办法:

创建一个tmp文件夹里边存一个hello.xlsx

运行截图:

python初探爬虫的更多相关文章

  1. Python简单爬虫入门三

    我们继续研究BeautifulSoup分类打印输出 Python简单爬虫入门一 Python简单爬虫入门二 前两部主要讲述我们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信 ...

  2. Ubuntu下配置python完成爬虫任务(笔记一)

    Ubuntu下配置python完成爬虫任务(笔记一) 目标: 作为一个.NET汪,是时候去学习一下Linux下的操作了.为此选择了python来边学习Linux,边学python,熟能生巧嘛. 前期目 ...

  3. Python简单爬虫入门二

    接着上一次爬虫我们继续研究BeautifulSoup Python简单爬虫入门一 上一次我们爬虫我们已经成功的爬下了网页的源代码,那么这一次我们将继续来写怎么抓去具体想要的元素 首先回顾以下我们Bea ...

  4. [Python] 网络爬虫和正则表达式学习总结

    以前在学校做科研都是直接利用网上共享的一些数据,就像我们经常说的dataset.beachmark等等.但是,对于实际的工业需求来说,爬取网络的数据是必须的并且是首要的.最近在国内一家互联网公司实习, ...

  5. python简易爬虫来实现自动图片下载

    菜鸟新人刚刚入住博客园,先发个之前写的简易爬虫的实现吧,水平有限请轻喷. 估计利用python实现爬虫的程序网上已经有太多了,不过新人用来练手学习python确实是个不错的选择.本人借鉴网上的部分实现 ...

  6. GJM : Python简单爬虫入门(二) [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  7. Python分布式爬虫原理

    转载 permike 原文 Python分布式爬虫原理 首先,我们先来看看,如果是人正常的行为,是如何获取网页内容的. (1)打开浏览器,输入URL,打开源网页 (2)选取我们想要的内容,包括标题,作 ...

  8. Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱(转)

    原文:http://www.52nlp.cn/python-网页爬虫-文本处理-科学计算-机器学习-数据挖掘 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开 ...

  9. 关于Python网络爬虫实战笔记③

    Python网络爬虫实战笔记③如何下载韩寒博客文章 Python网络爬虫实战笔记③如何下载韩寒博客文章 target:下载全部的文章 1. 博客列表页面规则 也就是, http://blog.sina ...

随机推荐

  1. 选择排序-Python & Java

    选择排序:1.找出最小的数值放在第一位2.找出剩余数据中最小的数值放在第二位,以此类推,直到最后一个数值 算法的时间复杂度为:O(n) ''' 选择排序: 1.找出最小的数值放在第一位 2.找出剩余数 ...

  2. jeecg接口开发及权限实现原理

    接口开发使用的框架 jeecg本身是基于 Spring MVC 框架搭建的,因此,使用 Spring MVC 框架的 RESTful API 功能来进行接口开发就是顺理成章的事了. 接口的拦截与鉴权 ...

  3. Dubbo入门到精通学习笔记(十三):ZooKeeper集群的安装、配置、高可用测试、升级、迁移

    文章目录 ZooKeeper集群的安装.配置.高可用测试 ZooKeeper 与 Dubbo 服务集群架构图 1. 修改操作系统的/etc/hosts 文件,添加 IP 与主机名映射: 2. 下载或上 ...

  4. on() 不支持hover事件

    因为 .hover() 是 jQuery 自己定义的事件… 是为了方便用户绑定调用 mouseenter 和 mouseleave 事件而已,它并非一个真正的事件,所以当然不能当做 .bind() 中 ...

  5. 19、Page Object 实例

    项目目录介绍: CalcuatorPage.java文件代码: package example; import io.appium.java_client.android.AndroidDriver; ...

  6. 【Java多线程系列随笔二】BlockingQueue

    前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题.通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便 ...

  7. MySQL数据库(六) —— SQL注入攻击、视图、事物、存储过程、流程控制

    SQL注入攻击.视图.事物.存储过程.流程控制 一.SQL注入攻击 1.什么是SQL注入攻击 import pymysql conn = pymysql.Connect( user="roo ...

  8. 常用内置模块(四)——subprocess、re

    常用模块(四) 一.subprocess模块 1.subprocess为子流程模块,用于执行系统命令,该模块在Python全栈开发中不常用 2.常用方法 run 返回一个表示执行结果的对象 call ...

  9. python中函数的定义及调用

    python中函数的定义及使用方法 1.函数的概念:函数是将具有独立功能的代码块组织为一个整体,使其具有特殊功能的代码集; 2.函数的作用:使用函数可以加强代码的复用性,提高程序编写的效率; 3.函数 ...

  10. MFS分布式文件系统【4】客户端的挂载MFS存储空间

    挂载基于MooseFS 分布式文件,客户端主机必须安装FUSE软件包(FUSE版本号至少2.6,推荐版本号大于2.7的fuse) [root@master ~]# rpm -qa|grep fuse ...