o基础学爬虫

1、什么是爬虫:

网络爬虫,是一种自动抓取互联网信息的程序或者叫脚本,根据用户的需求定向的爬取数据。本质就是,打开网页获取想要的数据。

用到的几个模块

import bs4  #网页解析,进行获取数据 采用cmd打开控制面板,pip stall  Beautifulsoup4

import re  #正则表达式,进行文字匹配

import urllib.request,urllib.error   #制定URL,获取网页数据

import xlwt  #进行excel操作 pip stall xlwt

import sqlite3   #进行数据库操作

国内清华源下载镜像

手刃一个爬虫

from urllib.request import urlopen

url="http://www.baidu.com"

resp=urlopen(url)

with open("mybaidu.html",mode=''w'',encoding='utf-8') as f:#进行解码

        f.write(resp.read.decode("utf-8"))

print("over")

1.web请求剖析

服务器渲染:把服务器那边直接与数据进行和HTML进行整和,统一返回浏览器

客服端渲染:第一次请求只要求一个html骨架,第二次请求,拿到数据,进行数据展示,在页面源代码中,找不到数据,找到请求=url,要求熟练掌握游览器抓包工具F12

2.HTTP/s协议

就是两个计算机为了沟通进行的一个君子协议,常见的协议有TOP/SOAP/HTTP/SMTP协议

HTTP协议进行超文本传输(就是进行页面源代码的传递)

请求

1.请求行->请求方式 (get/ post )url地址

2.请求头->放一些服务器的附加信息(防爬的内容)

3.请求体->放请求参数()

响应

1.状态行:状态码(200)(404)(500)

2.响应头:放一些客户的附加信息

3.响应体:返回客户真正需要的HTML,josn等

请求头中一些常见的内容:

User-Agent:请求载体身体身份标识:(用啥发送请求)

Referer:反盗链(一些反爬所需要)

cookie:本地字符串数据信息(用户登陆信息,反爬的的token)

响应头的一些内容:

1.cookie::本地字符串数据信息(用户登陆信息,反爬的的token)

2.各种神奇的字符串(各种攻击和反爬)

请求方式

get:查选,显示提交,所有地址栏的url

post:修改,隐私提交

get

import requests
a=input("请输入一个你喜欢的明星")

url=f'https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&tn=monline_4_dg&wd=a={a}'
headers={"User-Agent":
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0"
    }
resp=requests.get(url,headers=headers)


print(resp)
print(resp.encoding)
resp.encoding='utf-8'#指定字符集
print(resp.encoding)

post

import requests
url="https://fanyi.baidu.com/sug"
s=input("请输入你要翻译的英文单词")
dat={
    "KW":s
    }

#发送post请求
resp=requests.post(url,data=dat)#发送post请求,需要把数据放在字典中,通过data的参数进行传递
print(resp.text.)

客户端渲染

import requests
url="https://movie.douban.com/j/chart/top_list"
param={
"type":"24",      #进行参数的包装
"interval_id":"100:90",
"action":"" ,
"start": "0",
"limit":" 20",
    }
headers={"User-Agent":"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54"}#模拟游览器访问,
resp=requests.get(url=url,params=param,headers=headers)
print(resp.json())

resp.close()#进行关闭response

正则表达式(RE解析)

(regular expression)  OSchina在线工具

一种使用表达式的方式对字符串进行匹配的语法规则

元字符

全部内容点击链接

http://t.csdn.cn/eCAL1

 惰性匹配

.*?:但出现多个混淆时,问号则考虑了尽可能少的匹配内容

RE模块

import re
lst=re.findall(r"\d+","我的电话是1008611,我的女朋友的电话是5555")
print(lst)
#findall:匹配字符串中所有的符合正则的内容{返回列表}
#finditer:匹配字符串中所有的内容{返回为迭代器}
it=re.finditer(r"\d+","我的电话是1008611,我的女朋友的电话是5555")
print(it)#迭代器
for i in it:
    print(i.group())#从在迭代器中拿到内容需要进行.group()

#search返回的结果是match对象,拿数据需要.group()
import re
s=re.search(r"\d+","我的电话是1008611,我的女朋友的电话是5555")
print(s.group())
#特点全文预检索,检索一个则返回
#match 进行从头匹配

 预加载正则表达式

#采用正则预加载
import re
obj=re.compile(r"\d+")
ret=obj.finditer("我的电话是1008611,我的女朋友的电话是5555")
for it in ret:
    print(it.group())

豆瓣top250

from urllib.request import Request,urlopen
import re

# 1.查找网页源代码
def get_page(url):
    # 1.准备请求信息
    r = Request(url=url,
                headers={
                'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'})
    # 2.打开url
    response = urlopen(r)

    # 3.因为得到的文件用utf-8进行编码,所以用 utf - 8进行解码
    return response.read().decode('utf-8')

# 2.从网页中提取需要的信息
def get_infomation(s):
        # 正则表达式
        obj = re.compile(r'<div class="item">.*?<em class="">(?P<排名>.*?)</em>'
                         r'.*?<span class="title">(?P<电影名>.*?)</span>'
                         r'.*?导演: (?P<导演>.*?) '
                         r'.*?<span class="rating_num" property="v:average">(?P<评分>.*?)</span>'
                         , re.S)
        # 运用正则表达式提取信息
        result = obj.finditer(s)
        lst = []
        for item in result:
            lst.append(item.groupdict())
            # lst.append(item.group())
        return lst
def main():
    result = []
    # 把所有的网页的信息都提取出来
    for i in range(10):
        s = get_page(f'https://movie.douban.com/top250?start={i * 25}')
        result += get_infomation(s)
    with open("test.txt", mode='a', encoding='utf-8') as fp:
        for item in result:
            fp.write(str(item))
            fp.write('\n')
    lst = []
    # 去除字典的’ 和 { } 符号
    with open("test.txt", mode='r', encoding='utf-8') as fp:
        for line in fp:
            k = line.replace('{', "")
            k = k.replace("}", "")
            k = k.replace("'", "")
            lst.append(k)
    with open("test.txt", mode='w', encoding='utf-8') as fp:
        for item in lst:
            fp.write(item)
main()

HTML语法

HTML超文本标记语言

<h1> i love you</h1>

<h2 align="center">i don't love you</h2>

#h1:是标签

#align:属性

#center:是属性值

<标签 属性=“属性值”>被标记的内容</标签>

<标签 />

<img src="xxx.jpg"/>这种标签自带闭合

下次更新,欢迎关注。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值