码迷,mamicode.com
首页 > 编程语言 > 详细

python初探爬虫

时间:2019-10-17 12:17:31      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:work   运行   tmp   -o   存储   sheet   print   find   str   

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初探爬虫

标签:work   运行   tmp   -o   存储   sheet   print   find   str   

原文地址:https://www.cnblogs.com/blamwq/p/11690964.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!