python爬虫

motivation-批量下载论文

Posted by Sun on June 5, 2020

前置知识介绍

介绍

爬虫: 自动抓取互联网信息,获取对我们有价值的信息

比如说搜索引擎 (Google, 百度), 他们能为你提供这么多搜索结果, 也都是因为它们爬了很多信息, 然后展示给你. 再来说一些商业爬虫, 比如爬爬淘宝的同类商品的价格信息, 好为自己的商品挑选合适的价格. 爬虫的用途很多很多, 如果你搞机器学习, 爬虫就是你获取数据的一种途径, 网上的信息成百上千, 只要你懂爬虫, 你都能轻松获取.

Why?

架构

  1. 调度器 – 负责调度URL管理器、下载器、解析器之间的协调工作。

  2. URL管理器 – 管理待爬取的URL地址和已爬取的URL地址

  3. 网页下载器 – 传入一个URL下载网页, 讲网页转换成字符串

    如urllib2(官方基础模块), 包括需要登录, 代理, cookie, requests

  4. 网页解析器 – 讲网页字符串或DOM树进行解析

    网页解析器有正则表达式(直观,将网页转成字符串通过模糊匹配的方式来提取有价值的信息,当文档比较复杂的时候,该方法提取数据的时候就会非常的困难)、html.parser(Python自带的)、beautifulsoup(第三方插件,可以使用Python自带的html.parser进行解析,也可以使用lxml进行解析,相对于其他几种来说要强大一些)、lxml(第三方插件,可以解析 xml 和 HTML),html.parser 和 beautifulsoup 以及 lxml 都是以 DOM 树的方式进行解析的。

  5. 应用程序

    20170427113109368

HTML

HTML在线编程网页-菜鸟工具

HTML是一种用于创建网页的标记语言,里面嵌入了文本、图像等数据,可以被浏览器读取,并渲染成我们看到的网页样子。

HTML标记包含标签(及其属性)、基于字符的数据类型、字符引用和实体引用等几个关键部分。

标签是最常见的,通常成对出现,比如<h1></h1>

这些成对出现的标签中,第一个标签是开始标签,第二个标签是结束标签。两个标签之间为元素的内容(文本、图像等),有些标签没有内容,为空元素,如<img>。 $$

<开始标签>内容</结束标签> $$ 以下是一个经典的[Hello World](https://link.zhihu.com/?target=https%3A//zh.wikipedia.org/wiki/Hello_World)程序的例子: ```html <!DOCTYPE html> This is a title

Hello world!

``` ## python网络爬虫的基本原理 在编写python爬虫程序时,只需要做以下两件事: - **发送GET请求,获取HTML** - **解析HTML,获取数据** 这两件事,python都有相应的库帮你去做,你只需要知道如何去用它们就可以了。 # 快速入门 — 提取百度logo demo ```python from urllib.request import urlopen from bs4 import BeautifulSoup as bf from urllib.request import urlretrieve # 获取HTML html = urlopen("http://www.baidu.com/") # 发出请求,获取html # html_text = bytes.decode(html.read()) # 获取的html内容是字节,将其转化为字符串 # print(html_text) # 解析HTML obj = bf(html.read(), 'html.parser') # 用BeautifulSoup解析html title = obj.head.title # 从标签head、title里提取标题 print(title) # 获取信息, 我们通过findAll("img")就可以获取到所有图片的信息了。 pic_info = obj.find_all('img') for i in pic_info: # 分别打印每个图片的信息 print(i) # 只提取logo图片的信息, 使用class_方法 logo_pic_info = obj.find_all('img',class_="index-logo-src") logo_url = "https:"+logo_pic_info[0]['src'] # 提取logo图片的链接 print(logo_url) # 使用urlretrieve下载图片 urlretrieve(logo_url, 'logo.png') ```