Python如何爬取指定百度搜索的内容并提取网页的标题内容,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
十多年的齐齐哈尔网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都营销网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整齐齐哈尔建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“齐齐哈尔网站设计”,“齐齐哈尔网站推广”以来,每个客户项目都认真落实执行。
hello,大家好。今天为大家带来的是之前分享过的requests库与lxml库的结合使用案例一:指定百度搜索的内容并提取网页的标题内容。好的,废话不多说,直接上主菜。
下面我们来完成我们的第一步,分析我们的目标。大家可千万不要小看这一步哦,因为我们只有思路清晰才能在较短的时间里面写出漂亮的代码。
首先,我们想要请求网页,必须知道我们的url(即网址)是什么。下面,我打开Chrome(谷歌)浏览器,并且打开百度页面,指定搜索“python”,得到下图结果:
写python程序,有时候很矛盾,是用面向对象呢?还是面向过程呢?其实都随意(我比较随意,因为没有人要求我必须使用什么写),这里我采取面向对象的方式来写这个程序。
#文件一 import requests class MySpider(object): def __init__(self): self.url = 'http://www.baidu.com/s?wd={name}' #这里采用format的格式化输入 self.headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36' } def main(self): #处理url self.target = input('请输入你感兴趣的内容:') self.url = self.url.format(name=self.target) #重新构建url,大家测试的时候可以尝试打印 #请求 text = self.get() #写入文件 self.write(text) def get(self): '''请求并返回网页源代码''' pass def write(self,text): '''将返回的源代码写入文件,等待之后解析用''' pass if __name__ == '__main__': spider = MySpider() spider.main()
这里有几个原因。
1>我们写代码,一般来说都不可能一次写成功,总是需要修改和测试的。平时我们写代码,自然可以随意的测试运行,都可以检测代码是否正确,但是爬虫却不能这样。因为如果你在较短时间内访问了网站次数过多,可能会导致网站对你做出一些限制性举动,比如:增加验证码判断你是否为人类,严重点的短时间内封禁你的ip。因此,我们将网页源代码写入文件,这样在之后写解析代码的时候就不需要重新去访问网站了。
2>我们以html的形式写入文件,可以用浏览器打开这个文件,可以比较清晰的看出这个文件是否为我们需要爬取的文件。如下图是我爬取后存入的文件以谷歌浏览器打开的结果:
下面我们来完成获取页面的程序代码:
def get(self): '''请求并返回网页源代码''' response = requests.get(self.url,self.headers) if response.status_code == 200: return response.text
这个没什么好说的,是最基础的代码。
def write(self,text): with open('%s.html'%self.target,'w',encoding='utf-8') as f: #这里的self.target为输入搜索的内容 f.write(text)
这个也只是文件的基本操作,没什么好讲解的地方,只是注意我们这里存入的为html文件,而不是txt文件。
这里检测的方式我前面已经提及,就是浏览器打开相应的页面即可。如下图操作:
说明程序正常运行。
from lxml import etree class Parse(object): def __init__(self): #读取内容并且初始化 with open('python.html','r',encoding='utf-8') as f: self.html = etree.HTML(f.read()) #解析页面 def parse(self): pass if __name__ == '__main__': parser = Parse() parser.parse()
下面我们来完成最后一步,解析函数的敲写。
首先我们需要分析下,我们想要获取的内容在什么标签里面。分析过程如图(个人认为这部分比较重要,因为我初学的时候主要困惑于两点:如何处理失败的请求,解析的思路是什么)
好的,分析清楚了我们需要的内容在哪里之后,可以使用lxml来写代码了,如下:
def parse(self): #获取url h4_tags = self.html.xpath('//h4[contains(@class,"t")]//text()') h4_tags = [i.strip() for i in h4_tags] print(h4_tags)
下面要做的工作就是处理这些字符串,但是这个并不是我们的重点,并且这些数据并不重要,所以就不处理了。
# -*- coding:utf-8 -*- #获取网页内容文件 import requests class MySpider(object): def __init__(self): self.url = 'http://www.baidu.com/s?wd={name}' #写清楚获取headers途径 self.headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36' } def main(self): #处理url self.target = input('请输入你感兴趣的内容:') self.url = self.url.format(name=self.target) #请求 text = self.get() #写入文件 # self.write(text) def get(self): '''请求并返回网页源代码''' response = requests.get(self.url,self.headers) if response.status_code == 200: return response.text def write(self,text): with open('%s.html'%self.target,'w',encoding='utf-8') as f: f.write(text) if __name__ == '__main__': spider = MySpider() spider.main()
# -*- coding:utf-8 -*- #解析页面文件 from lxml import etree class Parse(object): def __init__(self): with open('python.html','r',encoding='utf-8') as f: self.html = etree.HTML(f.read()) def parse(self): #获取标题 h4_tags = self.html.xpath('//h4[contains(@class,"t")]//text()') h4_tags = [i.strip() for i in h4_tags] print(h4_tags) if __name__ == '__main__': parser = Parse() parser.parse()
好的,今天的分享就到此为止了。这是最基础的案例,主要目的是让大家先熟悉下,如何使用requests和lxml写一个爬虫程序,其次就是让大家熟悉下分析网站的思路。
关于Python如何爬取指定百度搜索的内容并提取网页的标题内容问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。