Python 爬取网站小实例

       由于这学期开了一门叫《大数据技术与应用》的课,从而开始了Python的学习之旅。刚开始讲课,老师讲的比较基础,加上自己之前累积了一些语言基础,于是很快便变得“贪得无厌”。

       到了周末,便开始在网上疯狂搜索各种爬虫教程,很快,便写出了自己的第一个爬取网页的程序。其实应该说代码较为恰当些,毕竟就几行而已。不过,当时运行后,打印出页面信息的感觉还是挺爽的。而有了第一步,自然会去尝试更多

     好了,废话不多说,接下来聊聊今天要分享的这个爬取某电影网站电影信息的小案例。

     开发平台:Eclipse 4.5+PyDev 5.2

     爬取步骤:

     1.打开电影网站 点击打开链接,然后右键选择查看源代码。

     2.打开源代码后,滑动滚动条找到最新上线这一栏。

     

     3.寻找我们需要的信息以及包含它们的标签。可以看到,其中只有电影名和电影简单介绍两个信息,这显然无法满足我们的需求。而这时候就要发挥我们的探索精神了,首先当然是其中的超链接<a href="....”>,直接点击后,发现浏览器打开了一个新页面,而页面所显示的内容正是我们所需的电影信息!

     4.接下来就是重复操作了,打开源代码,寻找所需信息,然后记录其所在标签及父标签。(因为有时候不能直接得到某个标签的数据,这时候我们可以先得到其父标签,再得到所需标签值。)

  

     5.源码窗口不要关,因为爬取成功前(像我这样的小白)可能要调试很多次。

    到此,寻找工作就结束了,然后开始敲代码吧。

   写成一个文件不太好看,所以我将部分函数移到了另一个文件openhtml.py中。

  openhtml.py

# coding=UTF-8
'''定义获取页面信息和下载网络图片的函数
'''
# 要导入的库
import requests
import os
import urllib
os.chdir('C:\Users\Administrator\Desktop')  # 更改工作目录为桌面
i = 0  # 定义全局变量
# 获取网页
def getHtml(src):
    page = requests.get(src)
    html = page.content
    return html

# 下载网页图片方法一
'''
def getImage(imgadress):
    imgcontent = requests.get(imgadress).content
    global i  
    i += 1
    filename = 'image' + str(i) + '.jpg'
    if os.path.exists('webImgs') == False:
        os.mkdir('webImgs', 0775)

    else:
        if i == 1:  # 第一次提醒即可
            print '文件夹已存在'

        try:
            with open('webImgs' + '\\' + filename, 'wb')as f:
                f.write(imgcontent)
        except Exception, e:
            print '下载图片失败:', e
        else:
            print '下载图片成功'
'''

# 图片下载方法二,可显示下载进度
def download(imgadress):
    global i  # 声明全局变量,在使用时声明
    i += 1
    if os.path.exists('img') == False:  # 判断img文件夹是否存在
        os.mkdir('img', 0777)  # 桌面创建img文件夹,用于存放图片

    else:
        if i == 1:
            print '文件夹已存在'
    print '开始下载电影封面'
    filename = 'img' + '\\' + 'image' + str(i) + '.jpg'
    urllib.urlretrieve(imgadress, filename, cbk)

# 定义回调方法,计算下载进度
def cbk(a, b, c):
    ''' 
    a:数据块数量
    b:数据块大小
    c :文件大小
     '''
    pro = 100 * a * b / c  # 计算当前进度
    if pro > 100:
        pro = 100
    print '当前下载进度:', '%' + '%4.2f' % pro

  主文件test4.py   

# coding=UTF-8
'''function:爬取2345影视中最新上线的电影信息
'''
import openhtml  # 导入自定义的module
from bs4 import BeautifulSoup as bs  # as起到改名作用,以便后面书写

# 转到电影的具体信息页面
def turn(newhtml):
    newhtml = openhtml.getHtml(newhtml)
    soup1 = bs(newhtml, 'lxml')
# 获取图片url
    i = soup1.select('img')  # 选择器,返回一个列表
    imgadress = 'https:' + i[0].get('src')  # get()获取标签的某个属性
    # openhtml.getImage(imgadress) #调用图片下载方法1
    openhtml.download(imgadress)  # 调用图片下载方法2
# 获取电影信息
    text = soup1.select('.tit')  # css选择用法: '.' 代表class , '#'代表id
    print text[0].text
    div2 = soup1.select('div.wholeTxt')
    for em in div2[0].find_all('li'):
        text1 = ' '.join(em.text.strip().split())
        print text1


print '任务开始'
src = 'https://dianying.2345.com/'  # 爬取入口:网站首页url
html = openhtml.getHtml(src)
soup = bs(html, 'lxml')  # 采用lxml解析更快,默认为‘html.parser’
div = soup.find_all('div', class_='row clearfix')
for d in div[0].find_all('div', class_='pic'):
    a = d.select('.aPlayBtn')
    inforhtml = 'https:' + a[0].get('href') #生成电影信息页面的url
    turn(inforhtml)

print '任务结束'

导入的库若没有的话,可以参考这个pip如何安装所需库,安装后再导入就会有了(lxml解析器也可以这样装)

代码中有些beautifulsoup的操作,我也只是初学,感兴趣的话可以参考这篇beautifulsoup使用教程,个人觉得比起正则表达式,这个对我们小白友好多了。除了这个,还有xpath也不错,当然,用哪个看个人喜好。

最后,放张效果图吧。

 

 

第一次写博客,表述有些冗杂,大家见谅哈。

 

博主其他文章推荐:

[1] 【python实用特性】-切片

[2] 【python实用特性】- 迭代、可迭代对象、迭代器

[3] 【python实用特性】- 列表生成式

[4] 【python实用特性】- yield生成器

[5] Python如何爬取动态网页数据

[6] Python+selenium实现自动爬取实例

[7] python爬取豆瓣Top250-改进版

[8] requests设置请求头、代理

[9] requests使用cookie模拟登陆豆瓣

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值