网页爬虫抓取百度图片(Python制作一个爬取百度快照什么样的程序*敏*感*词*法 )
优采云 发布时间: 2021-12-31 09:23网页爬虫抓取百度图片(Python制作一个爬取百度快照什么样的程序*敏*感*词*法
)
不想打开网站里面的页面?但是您想再次访问该软件。然后你就可以快速的用 Python 做一个爬取百度快照的程序了。那么这是一个什么样的程序呢,让我们一起来看看吧。
文章内容
百度截图
这是一个经常被人们忽视的细节。这是什么东西,我们打开百度,输入一些内容,或者点击访问这个链接,我们会发现百度中出现如下网页设置,我们可以尝试点击这个按钮
点击进去我们会发现下面的页面,那么我们要爬取的就是这个页面的内容
那么我们应该怎么做呢?
使用搜索框,可以发现我们还在百度界面搜索
我们再次观察快照链接,发现没有办法找到这个页面,所以只能访问我们的百度搜索界面,然后使用BS4分析我们的页面,然后抓取快照相关的新闻
编程
首先,我们首先设置我们的 HEADERS。百度本身也是一个爬虫。如果不是正常访问,是不可能成功的。然后我们把我们的Headers设置为CHROME的默认请求头,这样百度就可以认为我们是正常人请求的,而不是程序请求的。
这里的三个浏览器是我们CHROME EDGE YANDEX三个浏览器的请求头。我们可以在请求的时候随机使用这三个请求头,甚至可以添加自己的cookies来增加访问量。改善*敏*感*词*。
首先,我们先定义一个类,获取类中我们需要获取快照的地址,然后传递给SELF,是的,我们整个类中的程序都可以运行,然后获取我们整个页面的信息,打印出来
将我们得到的信息转换成我们的BS4对象,然后寻找主页的信息,尝试找到我们的snapshot选项
这里我们先定义一个list,然后得到上次reduce后的第一个link,我们把这个link保存到我们之前定义的snapshot list中,最后返回我们list的值
定义一个程序来获取图片。但需要注意的是,这不是图片,而是一些HTML数据。函数执行完后我们得到列表值后,我们会创建一个循环来获取列表中的所有元素。获取到元素后,我们将运行操作快照的函数,在我们整个类中使用SELF调用函数体
这是我们的职能。该函数首先访问获取到的链接,然后将其转换为我们想要成为的BS4对象,然后我们尝试获取我们的TITLE。此 TITLE 对该函数的主体没有影响。作用是让我们以后在UI程序中有一个好的标题。当然,网站的一些TITLE可能不会走这条路,所以我们不会得到这样的网站title。拿到watch提及后,我们将网站的链接结果改为中文模式,然后写入到我们的HTML文件中。
还是这个函数体,我们将调用我们用于UI设计的WXPython模块。这是调用WXPython的代码,但是在调用之前,我们要设置一些基本参数,继承我们的WXPython类。
我们将继承我们的相关功能。我们还将窗口的弹出大小设置为 800 长和 600 宽。这个窗口适用于大多数网站。
最后进入我们要访问的网站,大功告成
预防措施
我们使用这个程序主要是依靠百度的功能。如果您访问的是百度没有收录的域名,那么本程序将不会有任何响应。当然我们也可以添加一些不存在的检测机制,不过本文文章就不详细介绍了,有兴趣的可以自己研究。
当然,我们访问一些网站时,会出现乱码。这种现象是由 WXPython 对 HTML 的错误解析造成的。我们解决这个问题的方式可以通过使用PYQT5来解决。如果你有兴趣,请找我。显示外部网页的 PYQT5文章
还有一种情况是我们的百度知识限制了输入。一旦你输入太多的值,它不会给你访问,所以一些百家帐户文章无法预览。
完整代码
#_*_coding:utf-8_*_
import requests
from bs4 import BeautifulSoup
import wx
import wx.html2
class MyBrowser(wx.Dialog):
def __init__(self, *args, **kwds):
wx.Dialog.__init__(self, *args, **kwds)
sizer = wx.BoxSizer(wx.VERTICAL)
self.browser = wx.html2.WebView.New(self)
sizer.Add(self.browser, 1, wx.EXPAND, 10)
self.SetSizer(sizer)
self.SetSize((1000,800))
class WebCache():
def __init__(self,website):
self.website = website
self.GetPicsFile()
def searchBaiDu(self):
self.BD_headers1 = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36',
'Accept-Language': 'zh-CN,zh;q=0.9',
}
self.BD_headers2 = {
'User-Agent' : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36 Edg/89.0.774.50",
'Accept-Language': 'zh-CN,zh;q=0.9',
}
self.BD_headers3 = {
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.152 YaBrowser/21.2.2.101 Yowser/2.5 Safari/537.36",
'Accept-Language': 'zh-CN,zh;q=0.9',
}
BDCache = requests.get("https://www.baidu.com/s?&wd="+self.website,headers = self.BD_headers1)
BDCache = BDCache.text
# print(BDCache)
# 转换成BS4进行获取元素
soup = BeautifulSoup(BDCache,'html.parser')
# 寻找关于主页面的列表
cache_list = soup.find_all(id="content_left")
# 定义一个列表
BDCache_page_list = []
# 进一步减小范围,获取最终地址
for i in cache_list:
# 获取最终的访问地址
BDCache_page = i.a.get("href")
BDCache_page_list.append(BDCache_page)
# 返回列表数据
return BDCache_page_list
def OperationCache(self,path):
pics_page = requests.get(path,headers = self.BD_headers1)
# print(pics_page.text)
# 转换成BS4进行获取元素
soup = BeautifulSoup(pics_page.text,'html.parser')
# 寻找关于主页面的列表
try:
self.title = soup.title.string
except Exception as e:
pass
else:
pass
try:
self.pics_page = pics_page.content.decode("gbk")
except Exception as e:
self.pics_page = pics_page.text
else:
pass
print(self.pics_page)
# 写入页面至文件
with open("./pics_cache.html","w+",encoding = "utf-8") as f:
f.write(self.pics_page)
f.close()
def GetPicsFile(self):
BDCache_page_list = self.searchBaiDu()
for i in BDCache_page_list:
self.OperationCache(i)
app = wx.App()
dialog = MyBrowser(None, -1)
dialog.browser.SetPage(self.pics_page,self.title)
dialog.Show()
app.MainLoop()
WebCache("csdn.net")