当前位置:   article > 正文

【爬虫】【python】爬虫基础知识_为什么知乎的网页源代码

为什么知乎的网页源代码

获取网页源代码

1、快捷键查看网页源代码
笔记本的话用Fn+F12,可以调出来开发者工具,也就可以看到源代码了。
2、用右键快捷菜单查看网页源代码
使用右键快捷菜单看到的网页源代码和使用开发者
3、使用Request库来获取源代码:知乎

  1. 导入“Request库”
  2. 将特定网址赋给url
  3. 将该网址作为一个“钥匙”来访问连接
  4. 单纯这样会导致没有获取真正的网页源代码,因为那个知乎网址只认可浏览器发送的请求,不认可python发送的请求,这时候需要通过设置requests.get()函数的参数headers,以模拟浏览器进行访问。参数headers用于向网站提供访问者的信息,其中的User-Agent(用户代理)反映了访问者使用的是哪种浏览器,可以通过在地址栏中输入“about:version”,在弹出的界面找到“用户代理”,然后复制进去就好
import requests
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)' \
                         ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'}
url = 'https://www.zhihu.com/'
res = requests.get(url, headers = headers).text
print(res)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

补充说明
1.解决“复制网址后中文变成了英文和数字”的问题,这是因为浏览器默认识别的都是英文字符,中文字符则需要转换后才能识别,而这些字母、数字、百分号组成的内容可以直接理解成网址名的中文,因此可以直接将“=”后面的内容修改成为中文字符,例如“知乎”

分析网页源代码

1、利用开发者工具查看
由“获取网络源代码”中的F12,打开开发者工具,选中一条连接,可以在选项卡中看到对应的网址和标题,用同样的方法可以查看日期和来源等信息。(注意善用三角箭头)
2、利用右键快捷菜单查看
3、在pycharm中查看
也就是在结果输出区域,按快捷键Ctrl+F打开搜索框,搜索需要的信息

使用Selenium库获取网页源代码

Selenium库与Request库不同点在于Selenium库可以访问许多动态的网页,比如说股票网站等等,但是由于它需要模拟人们访问浏览器而Request库是直接访问,因此速度相对会慢一些,需要我们在实操的过程中多样结合。

1、访问以及关闭页面
通过以下代码即可访问网站,相当于模拟人打开一个浏览器,然后访问指定网址

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/')
  • 1
  • 2
  • 3

如果在上述浏览器中加入如下代码,就能关闭模拟浏览器

browser.quit()
  • 1

2、获取网页源代码
使用模拟浏览器打开指定的网址之后,可以通过如下代码获取浏览器中经过动态渲染的网页源代码

data = browser.page_source
  • 1

网页结构分析

在我的理解里面,网页的基本结构就是一个大框套着一个中框,一个中框再套着一个小框,这样的一种层级关系,如果前面有三角形箭头,可以点击箭头将其打开,后面还有内容说明,文本内容一般都在最小的框里。

一个好玩的小方法-建立一个简单的网页

首先创建一个文本文档,可以理解成记事本,然后输入

<p>hello world</p>
  • 1

保存并关闭文件,将文件名后缀改为“.html”,这个文件就变成HTML文件,也即是网页文件

HTML的基础知识

1、标题,段落,链接

我不知道为什么打尖括号弄不进去,就只好省略了,等后期找到方法了再来更改
h1~h6 定义标签,主要是大小的区别
p 定义段落
a 定义链接

2、区块
div 来定义区块

3、class属性和id属性
class 属性就可以理解成C语言里面的类,结构体那种
id 属性就可以理解成更加详细分类的一个指标

数据解析与提取

南京中医药大学药学院博导信息爬取实战代码

import requests
import re
from urllib.request import  urlretrieve

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                          'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'}
url = "http://yxy.njucm.edu.cn/3011/list.htm" # 南京中医药大学药学院师资力量的网址
res = requests.get(url, headers = headers) # 使用requests.get()函数访问该网址
res.encoding = 'utf-8' # 使用'utf-8'的编码格式来重新编码及解码
res = res.text

# 观察网页源码依次分析得到各位导师对应的姓名、网址
h_name = '<a .*?;" ' 'href=".*?" target="_self" sudyfile-attr=.*? textvalue=.*?>(.*?)</a>'
h_url = '<a style=.*?;" href="(.*?)" target="_self" sudyfile-attr'
final_name = re.findall(h_name, res)
final_name.insert(0, '马宏跃') # 通过输出列表数量并观察网页源码可知,代码中马宏跃老师的代码和别人是不一样的,所以我手动添加
final_url = re.findall(h_url, res)

# 清洗数据,去除导师名字中间的符号
for i in range(len(final_name)):
    if len(final_name[i]) > 4:
        temp = final_name[i]
        temp = temp[0] + temp[-1]
        final_name[i] = temp

# 爬取照片、介绍、联系方式

'''先访问每位老师对应的信息网址
在网址里面爬取老师的介绍,联系方式
并且下载老师的照片存放到文件夹中'''

final_introduce = ['0']
for i in range(len(final_name)):

    # 读取每位老师对应的网址
    hq_url = final_url[i]
    hq_res = requests.get(hq_url, headers=headers)  # 使用requests.get()函数访问该网址
    hq_res.encoding = 'utf-8'  # 使用'utf-8'的编码格式来重新编码及解码
    hq_res = hq_res.text

    # 读取介绍内容
    h_introduce = '<meta name="description" content="(.*?)" />'
    final_introduce.append((re.findall(h_introduce, hq_res))[1])

    # 读取照片所在的文件并下载到指定文件夹
    h_picture = '<img .*?src="(.*?)"'
    h_picture = re.findall(h_picture, hq_res)
    h_picture = str('http://yxy.njucm.edu.cn' + str(h_picture[0]))
    hq_res = requests.get(h_picture)
    file = open('D:\威\药学院博导_照片' + final_name[i] + '.jpg', 'wb')
    file.write(hq_res.content)
    file.close()

# 输出导师名字加信息所在的网址
final_introduce.remove('0')
for i in range(len(final_name)):
    print(str(i + 1) + '.' + final_name[i])
    print(final_url[i])
    print(final_introduce[i])


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号