爬虫----登录及点赞

基本操作:

  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)

 

    

原文地址:https://www.cnblogs.com/george92/p/7356195.html