有关于CSDN页面爬取破解的两个爬虫(编写时间20200104)

2024-03-05 18:58

本文主要是介绍有关于CSDN页面爬取破解的两个爬虫(编写时间20200104),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

由于课程设计需要编写了一系列爬虫,期中包括:
  • 博客园页面+博客园搜索
  • 百度搜索+百度文库
  • 简书搜索+简书页面
  • 爱学术搜索
具体目的就详细说明,反正就搜集一下资料和URL
下为CSDN的两个爬虫(编写时间20200104)
事先声明:CSDN页面爬虫并未完全破解,所以需要隔一段时间取一下cookie(根据其生存周期?)
  • 首先是CSDN页面爬虫

  • 使用前需要获取cookie中的acw_sc__v2加密码(暂时没破解,因为溯源会进入debug黑洞,比较麻烦,待完善)

  • 获取方式如下:
    在这里插入图片描述

  • 打开CSDN博文,Network模式下DOC,先Clear再刷新页面
    在这里插入图片描述

  • 找到第一个纯数字的那个doc,点开,cookie下找到
    在这里插入图片描述

  • 找到acw_sc__v2的value,加到header中的cookie中去,即可用爬虫得到真实页面

  • 下面是代码

import requests
import time
from lxml import etree
import random
import os
import jsonheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36","accept-language":"zh-CN,zh;q=0.9,en;q=0.8",# "cookie":"acw_sc__v2=5e0c4608eda0369b627288eebf26ea9b0d11bcbb""cookie":  "acw_sc__v2=5e0c90c2e2e885ed5748dbfaf6b26a12f0aad2e0"}def getContent(url):try:req = requests.get(url,headers = headers)req.encoding = req.apparent_encoding# print(req.text)html = etree.HTML(req.text)title = html.xpath("//*[@id='mainBox']/main/div[1]/div/div/div[1]/h1/text()")content = []for each in html.xpath("//*[@id='content_views']/*"):con_temp = each.xpath("string(.)")if  con_temp:content.append(str(con_temp))con_temp = each.xpath("img/@src")if con_temp:for eImg in con_temp:content.append("![]({})".format(eImg))return title,contentexcept:return "",""def save(title,content,name):with open("{}.md".format(name),'w',encoding='utf-8') as f:f.write(str(title[0])+'\n\n')for each in content:f.write(each+'\n')if __name__ == '__main__':url = "https://blog.csdn.net/w746805370/article/details/51312248"# 3SAT规约到独立集url = "https://blog.csdn.net/xiazdong/article/details/8258092"# 【NPC】3、3SAT规约到顶点覆盖url = "https://blog.csdn.net/xiazdong/article/details/8258086"# 证明题NP难问题:3SAT-------》独立集name = "3SAT-独立集"url = "https://blog.csdn.net/u010499172/article/details/73920646"# 几个NP-完全问题的证明name = "几个NP-完全问题的证明"url = "https://blog.csdn.net/kufaaa/article/details/54630460"title,content = getContent(url)if title is not "":save(title,content,name)else:print("访问出错,请更换acw码或者确认url试试")# 使用说明:由于CSDN中的加密机制,因此就算是静态页面,没有acw加密的码也拿不到真实数据# 故此使用时需预先获取acw_sc__v2码,它存在一定的时效性,具体获取方法见README
  • 接下来是中规中矩的CSDN搜索爬虫
    在这里插入图片描述
  • 这个就比较简单,没什么特别的反爬措施,直接上就完事了
import requests
import time
from lxml import etree
import random
import os
import json
import utils.Utils as sqheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
}proxy_list = ['117.90.131.247:8118','171.11.32.77:9999','223.199.31.112:9999','27.191.234.69:9999','223.199.31.5:9999','60.167.135.179:9999'
]def getContent(word, proxy, page, content):print("当前第{}页".format(page))try:url = "https://so.csdn.net/so/search/s.do?p={}&q={}&t=blog&viparticle=&domain=&o=&s=&u=&l=&f=&rbg=0".format(page,word)re = requests.get(url=url, headers=headers, proxies=proxy)html = etree.HTML(re.text)tit_list = html.xpath("//dl[@class='search-list J_search']")# print(len(tit_list))for each in tit_list:temp_url = each.xpath(".//div[@class='limit_width']/a[1]/@href")[0]temp_title = each.xpath(".//div[@class='limit_width']/a[1]")[0].xpath("string(.)").replace("\"","").replace("\n","").replace(")"," ").replace("("," ").replace("\\","")temp_content = each.xpath(".//dd[@class='search-detail']")[0].xpath("string(.)").replace("\"","").replace("\n","").replace(")"," ").replace("("," ").replace("\\","")# print("temp_url={}\ntitle={}\ncontent={}\n\n".format(temp_url, temp_title,temp_content))content.append([temp_url,temp_title, temp_content])if int(html.xpath("//span[@class='page-nav']/a/@page_num")[-1]) > page:time.sleep(random.uniform(0, 2))return getContent(word=word, proxy=proxy, page=page+1, content=content)except:print("访问出错")return contentdef do(word):proxy = {"http": random.choice(proxy_list)}content = getContent(word=word, proxy=proxy, page=1, content=[])# for each in content:#     print("url={}\ntitle={}\ncontent={}\n\n".format(#         each[0], each[1], each[2]))print(len(content))sq.insert_into_inital_data(content, "CSDN")
if __name__ == '__main__':word = "3sat"do(word)
总结
  • CSDN这个吧,感觉是有点难度,不过花点时间应该不是问题,那个cookie给我的感觉就像之前写过的简书一样,需要先访问一次获取,只是我在这样操作的时候陷入debug黑洞,后来,后来就偷了个懒。

这篇关于有关于CSDN页面爬取破解的两个爬虫(编写时间20200104)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/777492

相关文章

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

使用PyQt5编写一个简单的取色器

《使用PyQt5编写一个简单的取色器》:本文主要介绍PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16进制颜色编码,一款跟随鼠标刷新图像的RGB和16... 目录取色器1取色器2PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16

使用JavaScript将PDF页面中的标注扁平化的操作指南

《使用JavaScript将PDF页面中的标注扁平化的操作指南》扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,DynamsoftDocumentViewer... 目录使用Dynamsoft Document Viewer打开一个PDF文件并启用标注添加功能扁平化

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专

SpringBoot如何访问jsp页面

《SpringBoot如何访问jsp页面》本文介绍了如何在SpringBoot项目中进行Web开发,包括创建项目、配置文件、添加依赖、控制层修改、测试效果以及在IDEA中进行配置的详细步骤... 目录SpringBoot如何访问JSP页python面简介实现步骤1. 首先创建的项目一定要是web项目2. 在

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.