210301初识爬虫

210301课 初识爬虫

爬虫:开公开页面的信息并迅速提取出来

步骤:

1,获取网页源代码:

HTML

数据放在标签里面

打开目标网页>鼠标右键查看网页源代码(ctrl+u)

2,解析HTML页面

方法:

  • 正则表达式

  • Xpath

  • CSS选择器

3,数据持久化

1)可以存储的位置:

  • 文本文件(CVS)
  • Excel
  • 数据库

爬虫程序是法律灰色地带

如果被目标网站举证你有破坏别人动产行为,会产生法律问题

2) robots.txt 准入标识符:

Disallow不许爬的内容,

allow允许爬的类容
**隐匿身份:**让目标网站认为自己是来自网站的正常请求

4,爬虫分类

1)通用爬虫 :爬所有信息
2)定向爬虫 :只关注某一类数据

HTML超文本标签语言
head 网络页面的头部
body 网络页面的正文

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Smts6Q10-1614597745283)(C:\Users\Administrator\Desktop\QQ图片20210301103456.jpg)]

浏览器就是HTML语言的解释器,它能够执行HTML书写的代码
HTML页面最核心的就是标签,除了标签之外,还有CSS和JavaScript
HTML=Tag标签+CSS层叠样式表+JavaScript(JS)页面交互式行为
Tag > 数据content
CSS > 显示display 选择器
JS > 行为behavior 一段代码

练习:编辑一个自己的页面

先下载一个VSCodeUserSetu环境

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lbrbuLxK-1614597745286)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210301165425440.png)]

pycharm里面的存储地址设置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xKQBIGRW-1614597745288)(C:\Users\Administrator\Desktop\QQ图片20210301152514.jpg)]

5,URI >统一资源标识符

URI包括:URL和URN
URL > 网址 > Uniform Resource Locator统一资源定位符
URN >网络资源唯一标识
完整的URL构成:
https://username:[email protected]:443/path1/path2/index.html
https: >协议
username: >用户名
password@ >口令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uHNhLpAr-1614597745291)(C:\Users\Administrator\Desktop\QQ图片20210301152538.jpg)]

6,HTTP协议

HTTP >超文本传输协议

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dSenjLhL-1614597745294)(C:\Users\Administrator\Desktop\QQ图片20210301152546.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nQxjg7ca-1614597745297)(C:\Users\Administrator\Desktop\QQ图片20210301152554.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vswhIeUe-1614597745298)(C:\Users\Administrator\Desktop\QQ图片20210301152603.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fySnMrW6-1614597745299)(C:\Users\Administrator\Desktop\QQ图片20210301152619.jpg)]

网页菜单 >
请求:
–请求行:请求方式 请求路径 协议版本
–请求头:键值对
Host 请求的主机
Accept 接受的内容类型
User-Agent 操作系统和浏览器平台
如果爬虫要伪装成浏览器,就要修改对应的值
Accept-Language 浏览器的语言设定
Accept-Encoding 解码和压缩方式
–空行
–消息体
响应:
–响应行:协议版本 响应状态码

2开头:成功
3开头:重新请求
4开头:请求有问题
5开头:服务器有问题

–响应头:键值对
–空行
–消息体:服务器给浏览器的内容
如果请求的是代码,消息体里面就是HTML代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-09kucjFT-1614597745300)(C:\Users\Administrator\Desktop\QQ图片20210301150850.jpg)]

在响应行里常见的状态码所表达的意义:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xf0XCqyd-1614597745302)(C:\Users\Administrator\Desktop\QQ图片20210301151946.jpg)]

例1: 获取搜狐首页的HTML代码

三方库名称:
requests > 基于HTTP(S)协议联网的三方库

pip config set global.ind
ex-url https://pypi.doubanio.com/simple
pip install requests

import requests
resp = requests.get('http://www.sohu.com/')
print(type(resp))
print(resp.text)

例2:获取百度首页HTML代码

字符和字节之间的转换
str 字符串 encode()
bytes 字节串 decode()

import requests
resp = requests.get('http://www.baidu.com/')
print(type(resp))
# print(resp.text) 默认显示字符串,会显示乱码,需要解码
print(resp.content.decode('utf-8'))

例3:获取百度logo图片

import requests
resp=requests.get('https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png')
with open('baidu_logo.png', 'wb') as file:
    file.write(resp.content)

例4:获取豆瓣电影首页代码

'''
import requests
resp = requests.get('https://movie.douban.com/')
print(type(resp), resp.status_code)
print(resp.text)
'''
# 返回418  说明爬虫被豆瓣发现了
# 需要伪装成浏览器地址爬虫
import requests
resp = requests.get(
    url='https://movie.douban.com/top250',
    headers={
    
    
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36'
    }
)
print(resp.status_code)
print(resp.text)

例5:提取豆瓣电影top250

import re
import requests
import random
import time
pattern = re.compile(r'\<span class="title"\>(.+?)\</span\>')
for page in range(10):
    resp = requests.get(
        url='https://movie.douban.com/top250',
        headers={
    
    
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)'
                          ' AppleWebKit/537.36 (KHTML, like Gecko)'
                          ' Chrome/88.0.4324.190 Safari/537.36'
        }
    )
    print(resp.status_code)
    movie_titles = pattern.findall(resp.text)
    for title in movie_titles:
        print(title)
    time.sleep(random.randint(3, 5))
    # 爬虫时要设置时间间歇,防止封号
afari/537.36'
        }
    )
    print(resp.status_code)
    movie_titles = pattern.findall(resp.text)
    for title in movie_titles:
        print(title)
    time.sleep(random.randint(3, 5))
    # 爬虫时要设置时间间歇,防止封号

猜你喜欢

转载自blog.csdn.net/AncenaJune/article/details/114269724