基本操作:
url指定内容获取到:
-发送http请求,
-基于正则表达式获取内容
import requests
from bs4 import BeautifulSoup
response = requests.get("url")
response.text
obj = beautifulsoup(requests.text)
标签对象 = obj.find("a") #找到匹配成功的第一个标签
标签对象.find()
[标签对象,标签对象] = obj.find_all("a") #找到匹配成功的所有的标签,他返回的是列表,列表里是对象
简单的拿取:
import requests
from bs4 import BeautifulSoup
response = requests.get("url") #用get请求的方式获取到url的整个页面
response.encoding = "gbk" #对获取的url可能存在的字符编码的问题进行编码
soup = BeautifulSoup(response.text,"html.parser") #html.parser是Python内部的解析器,将内容解析成一个对象。
tag = soup.find(name="指定的标签") #优先找id 如何没有id,可以用attrs={ } 例如:attrs={"class":"标签"} 标签名=“属性”
如果想用class的话,可以是"class_",因为class是关键字,不用直接用。
s = soup.find(name="xx")
s1 = soup.find_all(name="xx")
s和s1的区别是s是标签对象,而s1是列表形式的标签对象
h3 = tag.find(指定标签)
print(h3)
拿取页面的详细信息:拿标题,简介,超链接,图片
import requests
from bs4 import BeautifulSoup
response = requests.get("http://www.autohome.com.cn/news/")
response.encoding = "gbk"
soup = BeautifulSoup(response.text,"html.parser")
li_list = soup.find(id="auto-channel-lazyload-article").find_all(name="li")
for li in li_list:
title = li.find("h3")
if not title:
continue
summary = li.find("p").text #简介
# li.find("a").attrs{"href"} # 是字典。获取标签的所有的属性
url = li.find("a").get("href") # 找到a标签后,获取href的属性。
img = li.find("img").get("src") # 找到a标签后,获取src的属性。
print(title,type(title),title.text,img,summary,url) # title.text就是标题文本
print("=============================================")
#下载图片
res = requests.get(img)
file_name = "%s.jpg" %(title)
with open(file_name,"wb") as f:
f.write(res.content)
登录:问题点(cookie)
流程:1.先get下载页面,获取csrf token
2.发送post请求,填写用户名密码
3.如果有csef token 就要获取到token
-如果登录成功,一定会有cookie
-cookie的携带有两种模式:区别,发post请求登录成功后再发cookie 有的网站是在第一次get请求时就将cookie发了,但是这个cookie在后台没有被授权,
--A:发送get请求获取到页面,提交用户名和密码后,会获取cookie,以后再发请求,带着这个cookie去就行了
--B:?
import requests
from bs4 import BeautifulSoup
#获取token
r1 = requests.get("https://github.com/login") #获取登录页面
s1 = BeautifulSoup(r1.text,"html.parser")
token = s1.find(name="input",attrs={"name":"authenticity_token"}).get("value") #获取input标签,和属性
r1_cookie_dict = r1.cookies.get_dict() #获取cookie
print(token)
#用户名密码token发送到服务器,以post形式发
r2 = requests.post(
"https://github.com/session",
data={
"utf8":"✔️",
"authenticity_token":"token",
"login":"wangzhe9251@163.com",
"password":"wangzhe9251",
"commit":"Sign in"
},
cookies=r1_cookie_dict
)
print(r2.text)
#如果r2发送成功,会带有cookie
r2_cookie_dict = r2.cookies.get_dict() # 一个字典形式的cookie
cookie_dict = {}
cookie_dict.update(r1_cookie_dict)
cookie_dict.update(r2_cookie_dict)
#在获取cookie后,就可以反复的登录了
r3 = requests.get(
url="https://github.com/settings/emails",
cookies=cookie_dict #带有cookie的标识,就可以访问了
)
print(r3.text)
点赞:
import requests
from bs4 import BeautifulSoup
#获取cookie
r0 = requests.get("http://dig.chouti.com/")
r0_cookie_dict = r0.cookies.get_dict()
#获取用户名和密码cookie
r1 = requests.post(
"http://dig.chouti.com/login",
data={
"phone":"86XXXXXXXXXXX",
"password":"woshiniba",
"oneMonth":"1"
},
cookies = r0_cookie_dict
)
print(r1.text)
print(r1.cookies.get_dict())
r1_cookie_dict = r1.cookies.get_dict()
#gpsd 和update分别都可以起到将cookie整合的作用,是所有可能的cookie组成一个字典。
cookie_dict = {# "gpsd":r0_cookie_dict["gpsd"]
}
cookie_dict.update(r0_cookie_dict)
cookie_dict.update(r1_cookie_dict)
#点赞 要被点赞的链接
r2 = requests.post(
"http://dig.chouti.com/link/vote?linksId=13938646",cookies = r1_cookie_dict)
print(r2)