【Python】爬虫入门强烈推荐系列一

网页基础

网页组成

网页是由 HTML 、 CSS 、JavaScript 组成的。
HTML 是用来搭建整个网页的骨架;CSS 是为了让整个页面更好看,包括我们看到的颜色,每个模块的大小、位置等都是由 CSS 来控制的;JavaScript 是用来让整个网页“动起来”,这个动起来有两层意思,一层是网页的数据动态交互,还有一层是真正的动,比如我们都见过一些网页上的动画,一般都是由 JavaScript 配合 CSS 来完成的。

直观展示

我们可以打开 Chrome 浏览器,随便访问一个网站,点击F12 开发者工具,可以看到:
在这里插入图片描述

代码解析

在选项 Elements 中可以看到网页的源代码,这里展示的就是 HTML 代码。

不同类型的文字通过不同类型的标签来表示,如图片用 <img> 标签表示,视频用 <video> 标签表示,段落用 <p> 标签表示,它们之间的布局又常通过布局标签 <div> 嵌套组合而成,各种标签通过不同的排列和嵌套才形成了网页的框架。

在下面 Style 标签页中,显示的就是当前选中的 HTML 代码标签的 CSS 层叠样式,“层叠”是指当在HTML中引用了数个样式文件,并且样式发生冲突时,浏览器能依据层叠顺序处理。“样式”指网页中文字大小、颜色、元素间距、排列等格式。

JavaScript 就厉害了,它在 HTML 代码中通常使用 <script> 进行包裹,可以直接书写在 HTML 页面中,也可以以文件的形式引入。

网页结构

HTML语言

HTML称为超文本标记语言,是一种标识性的语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。
简单来说,html语言就是网页代码的重要组成部分,我们可以简单体验并使用一下这种语言的编程风格。

Hello World

动手写一个Hello_World.html

  • 一、在本地建立一个Hello_World.txt文本
  • 二、输入以下代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>wujiekd</title>
</head>
<body>
<h1>Hello World</h1>
<p>Hello Python.</p>
</body>
</html>
  • 三、修改文件名为Hello_World.html
  • 四、双击文件,即可显示如下
    在这里插入图片描述

HTML代码分析

可以看到html语言非常直观且简洁,还有一个最大的特点是结构整齐。

整个 HTML 文档一般分为 head 和 body 两个部分,在 head 头中,我们一般会指定当前的编码格式为 UTF-8 ,并且使用 title 来定义网页的标题,这个会显示在浏览器的标签上面。

body 中的内容一般为整个 html 文档的正文,html的标签由<h1>到<h6>六个标签构成,字体由大到小递减,换行标签为<br>,链接使用<a>来创建,herf属性包含链接的URL地址,比如<a href=“http://www.baidu.com” >就是一个指向百度的链接。

HTML官方文档链接:Click~

CSS-style

前面我们介绍到 CSS 可以用来美化网页,那么我们简单加一点 CSS 修改下页面的显示效果。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>wujiekd</title>
</head>
<body style="background-color:grey;">
<h1 style="text-align:center;">Python爬虫</h1>	
<h3 style="background-color:red;">网页基础</h3>
<h3 style="background-color:green;">网页结构</h3>
<h3 style="background-color:blue;">未完待续</h3>
</body>
</html>

在这里插入图片描述

检查网页

开发者模式

以python官网的“python之禅”为例,首先在Chrome中打开python官网 ,可以选择“菜单”中的“更多工具” \rightarrow “开发者工具”,也可以直接在网页内容中右击并选择“检查”选项,还可以按f12键。效果如下图所示。

在这里插入图片描述
Chrome的开发者模式为用户提供了下面几组工具。

  • Elements:允许用户从浏览器的角度来观察网页,用户可以借此看到Chrome渲染页面所需要的HTML、CSS和DOM(Document Object Model)对象。

  • Network:可以看到网页向服务气请求了哪些资源、资源的大小以及加载资源的相关信息。此外,还可以查看HTTP的请求头、返回内容等。

  • Source:即源代码面板,主要用来调试JavaScript。

  • Console:即控制台面板,可以显示各种警告与错误信息。在开发期间,可以使用控制台面板记录诊断信息,或者使用它作为shell在页面上与JavaScript交互。

  • Performance:使用这个模块可以记录和查看网站生命周期内发生的各种事情来提高页面运行时的性能。

  • Memory:这个面板可以提供比Performance更多的信息,比如跟踪内存泄漏。

  • Application:检查加载的所有资源。

  • Security:即安全面板,可以用来处理证书问题等。

爬取Python之禅

锁定目标

网址:https://www.python.org/dev/peps/pep-0020/
内容如下:
在这里插入图片描述

获得信息

import requests
url = 'https://www.python.org/dev/peps/pep-0020/'
res = requests.get(url)
text = res.text
print(text)

展示部分获得信息:
在这里插入图片描述
可以看到返回的其实就是开发者工具下Elements的内容,只不过是字符串类型,接下来我们要用python的内置函数find来定位“python之禅”的索引,然后从这段字符串中取出它。
我们需要的不是所有的内容,我们只需要筛选出我们想要的。

再次锁定

  • 一、将鼠标移至的爬取的内容界面上;
  • 二、使用Ctrl + Shift + C(在 Mac上使用 Cmd + Shift + C)
  • 三、即可定位到被什么标签包围了。
    在这里插入图片描述

<pre> 标签可定义预格式化的文本。 被包围在 <pre> 标签 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。

再次获取并保存

with open('zon_of_python.txt', 'w') as f:
   	f.write(text[text.find('<pre')+28:text.find('</pre>')-1])
print(text[text.find('<pre')+28:text.find('</pre>')-1])

成功获取
在这里插入图片描述

爬取翻译

首选金山词霸

  • 首先进入金山词霸首页http://www.iciba.com/
    在这里插入图片描述
  • 然后打开开发者工具下的“Network”,翻译一段话,比如刚刚我们爬到的第一句话“Beautiful is better than ugly.”
    在这里插入图片描述
  • 点击翻译后可以发现Name下多了一项请求方法是POST的数据,点击Preview可以发现数据中有我们想要的翻译结果
    在这里插入图片描述
    在这里插入图片描述
    锁定url: “http://fy.iciba.com/ajax.php?a=fy”
import requests


def translate(word):
    url = "http://fy.iciba.com/ajax.php?a=fy"

    data = {
        'f': 'auto',
        't': 'auto',
        'w': word,
    }
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36',
    }  # User-Agent会告诉网站服务器,访问者是通过什么工具来请求的,如果是爬虫请求,一般会拒绝,如果是用户浏览器,就会应答。
    response = requests.post(url, data=data, headers=headers)  # 发起请求
    json_data = response.json()  # 获取json数据
    # print(json_data)
    return json_data


def run(word):
    result = translate(word)['content']['out']
    print(result)
    return result


def main():
    with open('zon_of_python.txt') as f:
        zh = [run(word) for word in f]

    with open('zon_of_python_zh-CN.txt', 'w') as g:
        for i in zh:
            g.write(i + '\n')

if __name__ == '__main__':
    main()

爬取豆瓣电影

豆瓣Top250链接:https://movie.douban.com/top250?start=0&filter=

#request.get进阶:爬取豆瓣电影
import requests
import os

if not os.path.exists('image'):
    os.mkdir('image')


def parse_html(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"}
    res = requests.get(url, headers=headers)    #应该是反爬机制,这个头可以混进去
    text = res.text
    item = []
    for i in range(25):
        text = text[text.find('alt') + 3:]
        item.append(extract(text))
    return item


def extract(text):
    text = text.split('"')
    name = text[1]
    image = text[3]
    return name, image


def write_movies_file(item, stars):
    print(item)
    with open('douban_film.txt', 'a', encoding='utf-8') as f:
        f.write('排名:%d\t电影名:%s\n' % (stars, item[0]))
    r = requests.get(item[1])
    with open('image/' + str(item[0]) + '.jpg', 'wb') as f:
        f.write(r.content)

def main():
    stars = 1
    for offset in range(0, 250, 25):
        url = 'https://movie.douban.com/top250?start=' + str(offset) + '&filter=' #每页只有25部电影,需要翻页
        print(url)
        for item in parse_html(url):
            write_movies_file(item, stars)
            stars += 1

if __name__ == '__main__':
    main()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43999137/article/details/105625829