zoukankan      html  css  js  c++  java
  • 爬虫学习笔记(1)-- 利用Python从网页抓取数据

    最近想从一个网站上下载资源,懒得一个个的点击下载了,想写一个爬虫把程序全部下载下来,在这里做一个简单的记录

    Python的基础语法在这里就不多做叙述了,黑马程序员上有一个基础的视频教学,可以跟着学习一下

    本篇博客为基础章:利用Python从网页端抓取数据,闲话不多说,开始正题:

    首先需要学习这几个模块:

    1 webbrowser:Python自带的模块,打开浏览器获取到指定的页面

    2 requests:从英特网上下载文件和网页

    3 Beautiful Soup:解析HTML,即网页编写的格式

    4 selenium:启动并控制一个Web浏览器。selenium能够填写表单,并模拟鼠标在这个浏览器上点击

    1 webbrowser模块:

    可以利用.open()方法打开指定的Url。例如在idea中输入如下代码:

    运行Python文件,系统会自动打开一个浏览器,打开百度

     2  requests模块:

    这是一个第三方模块,需要先从网上下载:

     我在Python的运行环境下报错:

    切换到cmd环境:

    安装成功,在项目中加载requests模块:

     1 import requests
     2 # 调用requests.get()下载文件
     3 res = requests.get('http://www.gutenberg.org/files/57156/57156-h/57156-h.htm')
     4 # 确保程序正在下载失败时候停止
     5 res.raise_for_status()
     6 # Python文件使用“wb”方式打开,写入字符串会报错,因为这种打开方式为:
     7 # 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
     8 playFile = open('test.txt','wb')
     9 # 利用iter_content()方法做循环
    10 # 一段为10000字节
    11 for chuck in res.iter_content(10000):
    12     playFile.write(chuck)
    13 playFile.close()
    示例

    这里放两个对于这个模块写的比较详细的Blog:

    2.1 快速上手

    2.2 用法总结

    3 Beautiful Soup模块:

    用于从html中提取元素信息

    首先安装第三方模块:

    在项目中加载

    首先在项目中添加名为example的html网页,代码如下:

    <html><head><title>The Website Title</title></head>
    <body>
    <p>Download my <strong>Python</strong> book from <a href="http://inventwithpython.com">my website</a>.</p>
    <p class="slogan">Learn Python the easy way!</p>
    <p>By <span id="author">Al Sweigart</span></p>
    </body></html>
    example

    显示效果如下:

    示例代码如下:

     1 import requests,bs4
     2 
     3 exampleFile = open('example.html')
     4 exampleSoup = bs4.BeautifulSoup(exampleFile.read(),"html.parser")
     5 print('----------通过id----------')
     6 # 返回一个带有id = "author" 的元素,将这个Tag对象的列表保存在变量elems中
     7 elems = exampleSoup.select("#author")
     8 print(type(elems))
     9 # 列表中只有一个Tag对象,只有一次匹配
    10 print(len(elems))
    11 print(type(elems[0]))
    12 # 元素的文本
    13 print(elems[0].getText())
    14 # 一个字符串,包含开始和结束标签,以及该元素的文本
    15 print(str(elems[0]))
    16 # 字典,包含元素的属性以及属性值
    17 print(elems[0].attrs)
    18 print()
    19 print('----------通过元素----------')
    20 pelements = exampleSoup.select('p')
    21 print(len(pelements))
    22 print(str(pelements[0]))
    23 print(pelements[0].getText())
    24 print(str(pelements[1]))
    25 print(pelements[1].getText())
    26 print()
    27 print('----------通过属性----------')
    28 spqnelem = exampleSoup.select('span')[0]
    29 print(len(spqnelem))
    30 print(str(spqnelem))
    31 print(spqnelem.get('id'))
    32 print(spqnelem.attrs)
    BeautifulSoup模块

    运行结果如图所示:

    值得一提的是,一开始在项目运行的时候吗,爆出如下的错误:

    解决方法很简单,在调用bs4.BeautifulSoup()函数时添加“html.parser”参数

    一些常用的css选择器的模式:

    CSS选择器的例子
    传递给select()方法的选择器 将匹配为...
     soup.select('div’)  所有名为<div>的元素
      soup.select('#author’)  带有id属性为author的元素
      soup.select('.notice’)  所有使用css class属性为notice的元素
      soup.select('div span’)  所有在<div>元素之内的<span>元素
      soup.select('div>span’)  所有直接在<div>元素之内的<span>元素,中间没有其他元素
      soup.select('input[name]’)  所有名为<input>,并有一个name属性,其值无所谓的元素
      soup.select('input[type = 'button']’)  所有名为<input>,并有一个type属性,其值为button的元素

    最后贴一个BeautifulSoup的文档以便参考

    4 selenium模块:

    该模块可以让Python直接控制浏览器

    首先导入模块,方法与之前的略有不同,首先需要下载压缩包,直接运行会报错:

    解压后在当前文件夹运行pip install selenium,按住Shift,右键选择在此处打开Powershell窗口

    在项目中导入模块,方法较之前几个模块,略有不同,示例代码如下:

     1 from selenium import webdriver
     2 import time
     3 bo = webdriver.Firefox()
     4 bo.get('https://www.baidu.com/')
     5 # 模拟点击页面按钮
     6 link = bo.find_element_by_partial_link_text('贴吧')
     7 link.click()
     8 # 模拟填写表单并注册
     9 bo.get('https://mail.qq.com/cgi-bin/loginpage')
    10 bo.switch_to.frame('login_frame')
    11 bo.find_element_by_css_selector('#switcher_plogin').click()
    12 emailelem = bo.find_element_by_id('u')
    13 emailelem.send_keys('账号')
    14 passelem = bo.find_element_by_id('p')
    15 passelem.send_keys('密码')
    16 passelem.submit()
    selenium

    运行时报以下错误:

    缺少geckodriver文件,在这里找到对应的版本后,下载之后解压到Python.exe和FireFox所在的文件夹里面即可

  • 相关阅读:
    如何优化软件测试成本?——转译
    Pytest(下篇)
    人与机器人如何协同来测试软件——译
    Appium自动化测试遇到的chromedriver/chrome坑
    Pytest(上篇)
    【selenium】利用selenium进行爬虫时,防止js检测驱动的方法
    【python】python分词和识别图像中的文字
    【python】Python获取QQ截图热键(ctrl+alt+a)截取的内容
    【python】pyinstaller如何将自己写的模块一并打包到exe中
    【python】python启动线程查看线程的名称和id;python杀掉进程的方法
  • 原文地址:https://www.cnblogs.com/Liu30/p/7379927.html
Copyright © 2011-2022 走看看