每日分享:
生命里的任何刁难都是野蛮游戏
经历了上次刷评论被禁言,系统提示是有恶意评论嫌疑,那总没有恶意点赞和恶意收藏吧,和评论类似,每日点赞也有上限,大概是15个。
注意:webdriver与xpath不同,webdriver不能像xpath那样直接获取属性值,需要用到
get_attribute函数来获取(本人编写代码时遇到的坑,xpath直接整到了属性值,结果一直报错)
在这之前需要先学会爬取博主文章的网址,不会的小伙伴可以去我之前的博客里看:爬虫中教你如何爬取自己喜欢博主所写文章标题及网址https://blog.csdn.net/qq_52262831/article/details/121484065?spm=1001.2014.3001.5502
在这里我们只需要爬取网址就可以了,代码如下:
import requests
from lxml import etree
from selenium import webdriver
i = 1
# 我访问的博主博客一共23页,观察每一页的网址发现前面都一样,就最后的数字不同
for i in range(24):
url = 'https://yangyongli.blog.csdn.net/article/list/{}'.format(i)
headers = {
'user-agent': '改为你的user-agent',
}
response = requests.get(url, headers=headers)
data = response.content
# 去除注释(浏览器给你的内容会注释很多有用代码)
data = data.decode().replace('', '')
html = etree.HTML(data)
# 找到网页中的a标签(包括title和link)
el_list = html.xpath('//*[@id="articleMeList-blog"]/div[2]/div/h4/a')
# 输出一页有多少个
print(len(el_list))
# 每一页爬取的结果放到列表里
data_list = []
for el in el_list:
data_list.append(el.xpath('./@href')[0])
# 写入文件中
f = open('../Data_Abstract/fabulous1.txt', 'a', encoding='utf-8')
for j in data_list:
f.write(j+'\n')
f.close()
print(data_list)
结果:
1. 在博主文章中抓包,进行点赞操作,找到下面这个包:
2. 经过多次抓包可以发现:同一文章中crticleld是相同的,所以想要对多个文章点赞,我们需要找到articleld来源于哪
3. 在元素中搜索(ctrl+f),发现可以搜到多处结果,选取容易提取的来提取:(因为其放在value属性中,所以容易提取)
4. 用webdriver提取:
a = driver.find_element('xpath', '//input[contains(@id,"article_id")]')
ID = a.get_attribute('value')
这两行代码即可提取出来(第二行代码作用是获得其value属性值)
5. 然后就注意,之前抓的包中的url,user-agent,请求类型,用一个cookie保持状态即可。
下面直接上源码:
import requests
from selenium import webdriver
# 将网址放到列表中
url_list = []
# fabulous1.txt为得到的网址
f = open('fabulous1.txt', 'r')
for j in f.readlines():
url_list.append(j.strip())
# print(j.strip())
f.close()
for i in range(len(url_list)):
# 文章的网址
URL = url_list[i]
# 响应的网址,抓包中like包的url
url = 'https://blog.csdn.net//phoenix/web/v1/article/like'
headers = {
'user-agent': '替换为你的user-agent值',
'cookie': '替换为你的cookie值'
}
driver = webdriver.Chrome()
driver.get(URL)
a = driver.find_element('xpath', '//input[contains(@id,"article_id")]')
ID = a.get_attribute('value')
driver.quit()
# //input[contains(@id,"article_id")]/@value
data = {
'articleId': ID
}
response = requests.post(url, headers=headers, data=data)
print(response.content)