网页爬虫抓取百度图片(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")

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线