python爬虫

python爬虫小记

  • GET 方式: 访问某个网页前不需要在浏览器里输入链接之外的东西,因为我们只是想向服务器获取一些资源,可能就是一个网页。
  • POST 方式:访问某个网页前需要在浏览器里输入链接之外的东西,因为这些信息是服务器需要的。 比如在线翻译,我们需要输入点英文句子,服务器才能翻译吧

url : 网址

resp: 响应

decode():字节转字符串

image-20211111193740305

请求过程剖析:

  1. 服务器渲染:在服务器那边直接把数据和HTML整合在一起 统一返回给浏览器

    在页面源代码中能看到数据

  2. 客户端渲染:第一次请求只要一个html骨架 第二次请求拿到数据进行数据展示

在页面源代码中看不到数据

熟练使用浏览器抓包工具

http协议: 浏览器与服务器之间数据交互遵守的协议

image-20211112094156208

请求头的重要内容

  1. User-Agent: 请求载体的身份标识(用啥发送的请求)
  2. Referer : 防盗链(这次请求是从哪个页面来的?反爬会用到)
  3. cookie: 本地字符串数据信息(用户登录信息、反爬的token)

响应头的主要内容:

  1. cookie: 本地字符串数据信息(用户登录信息、反爬的token)
  2. 各种神奇的莫名其妙的字符串

反爬请求头

反爬请求头(UA头)
     即用这些可以反反爬操作不必在用它浏览器自带的代码
     百度 PC UA
User-Agent: Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)

User-Agent: Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)

request

get() 能向服务器发送了一个请求,请求类型为 HTTP 协议的 GET 方式

post() 也能向服务器发送一个请求,请求类型是 HTTP 协议的 POST 方式

注:在地址栏里输的链接都是get()方式

import requests
url="https://www.sogou.com/web?query=周杰伦"
resp=requests.get(url)
print(resp)
print(resp.text) 注:拿到页面源代码(调用requests库)

​ 若被默认程序自动进入,需将其源代码中的network的user-agent内容复制粘到原程序,即

import requests
url="http://www.sogou.com/web?query=周杰伦"
dic={
 "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.44" 
}
resp=requests.get(url,headers=dic)
print(resp)
print(resp.text)

注:加上请求头让服务器信服

import requests
url='https://fanyi.baidu.com/sug'
s=input("请输入你要翻译的英文单词: ")
dat={
    'kw': s
}
resp=requests.post(url,data=dat)
print(resp.json())

requests获取百度翻译,变量为s可以自己随意输入(灵活性),为post型不是get. 发送post请求:发送的数据必须是放在字典中,通过data参数传递。json:将服务器返回的内容直接处理成json()

注:URL中的 后面为参数

使用完毕后记得 resp.close()

数据解析与提取

re解析
正则表达式
代码 意义
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线
\s 匹配任意的空白符
\d 匹配任意数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
\n 匹配一个换行符
\t 匹配一个制表符

注:大写为反义

代码 意义
\D 匹配非数字
\W 匹配非字母数字或下划线
\S 匹配非空白符
a|b 匹配字符a或b
[ ] 从文本第一个字符查找中括号内的有无匹配,有则输出,无则跳下一个字符
[^ ] 匹配除了字符组中字符的所有字符

量词:控制面前的元字符出现的次数

* 重复零次或更多次
+ 重复一次或更多次
重复零次或一次
重复n次
重复n次或更多次
重复n到m次

贪婪匹配或惰性匹配

.* 贪婪匹配
.*? 惰性匹配(查最短的数据)
re模块

注:可以给正则前加r

findall :匹配字符串中所有的符合正则的内容

finditer:匹配字符串中的所有内容(返回的是迭代器) 从迭代器中的拿到的内容需要 .group()

search:找到一个结果就返回,返回的结果是match对象 拿数据需要.group()

match:是从头开始匹配

即 lst=re.findall(r"\d+","我的电话是:10086,他的是:10010")

预加载正则表达式:

obj=re.compile(r"\d+")
 注:compile 函数用于编译正则表达式
re.s                      匹配换行符

注:如想要提取正则语句中的指定信息,只需把该.*? 括起来,然后加上 ?p<> 其中<>里为指定信息的名称

e g:

image-20211115133931783

image-20211115134058392

提取信息思路
  1. 拿到页面源代码 requests
  2. 通过re来提取想要的有效信息 re

strip() :移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。 注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符

p25

posted @ 2021-11-16 13:19  LianJXian  阅读(63)  评论(0编辑  收藏  举报