hello大家好,我是你们的可爱丸,我们又见面啦。距离上次更新已经将近一年,说起来还怪不好意思的。为了表示歉意, 本期教程我自创了一个python爬虫的万能通用公式并分享给大家。 学会这个方法,每次只需要进行简单修改,你就能轻松获取到许多网站上的信息。那么话不多说,我们现在就开始学习吧。
首先我们需要了解这个通用公式都有哪些步骤。其实,这个公式十分简单,只需要四个步骤,分别是:
1、导入需要用到的库
2、确定URL和请求头
3、编写获取数据的函数
4、调用函数
接下来,我们逐个进行讲解。
一、导入需要用到的库。
在这个通用公式里,我们要用到的库只有两个,一个是requests,另一个就是lxml里的etree,并且在通用公式中,第一个步骤的代码不需要进行任何改动,具体代码如下:
import requests
from lxml import etree
二、确定URL和请求头
url就是我们想要爬取的网站的链接,而请求头是从网站上的源代码处复制过来的,具体方法如下:
以虎扑网为例,代码如下:
url='https://www.hupu.com/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36',
'Referer': 'https://www.hupu.com/'}
三、编写获取数据的函数
首先我们要定义一个函数,因为都是实现获取数据的功能,所以我们将其命名为:get_data(),然后将设置好的headers传入,目的是为了防止反爬。encoding对应的是编码方式,这是为了防止获取到的网页内容乱码而设置的。
紧接着我们就是要设置selector选择器,然后通过xpath方法来获取内容对应的xpath路径。 xpath路径具体获取方法为: 右键点击网页任意空白处,选择检查。然后在弹出的窗口中,点击左上角的箭头符号,将箭头移动到你想要获取的数据位置,点击定位一下,然后再回到网页源代码处,点击右键,选择copy,再选择copy xpath,然后再将复制好的路径粘贴到我们编写的代码中。
最后我们需要用到print方法将对应的content内容打印出来。
具体实现代码如下:
def get_data(url):
response = requests.get(url, headers=headers)
response.encoding = 'utf-8'
selector = etree.HTML(response.text)
content = selector.xpath('//*[@id="newpcnews-1"]/div/div[2]/a[1]/div/text()')
print(content)
四、调用函数
函数定义好之后,我们就需要调用它,调用的方法就是将定义好的函数名称复写一遍,然后再将url传入即可。也可理解为这是在给整个代码设置一个开关,只有有了这一个开关,运行代码时程序才能跑起来。
具体代码如下:
get_data(url)
五、完整通用公式
学到此处,我们已经学会了python爬虫通用公式的所有步骤啦,将这些步骤的的代码放到一起,我们就可以得到爬虫通用公式的完整代码啦。
import requests
from lxml import etree
url='https://www.hupu.com/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36',
'Referer': 'https://www.hupu.com/'}
def get_data(url):
response = requests.get(url, headers=headers)
response.encoding = 'utf-8'
selector = etree.HTML(response.text)
content = selector.xpath('//*[@id="newpcnews-1"]/div/div[2]/a[1]/div/text()')
print(content)
get_data(url)
运行这个代码,我们就得到了网页中的数据。
六、其他案例分享
但是此刻肯定有很多小伙伴想问,那我想要获取别的网站的数据时该如何修改代码呢?其实使用通用公式来获取别的网站数据时,我们只需要修改两个地方。一是将步骤二中的url地址改成你想爬取的对应网站地址,二是将步骤三中content对应的xpath路径修改为对应的数据路径(按照我教的方法重新复制一下即可哦),那接下来我就带着大家用两个案例检验一下吧。
案例一:获取网易新闻的网站数据
网易新闻网址:
https://news.163.com/
网易新闻标题内容对应的复制出来的xpath路径:
//*[@id="js_top_news"]/div[2]/h2/a
那么我们需要修改的两处代码如下:
url = 'https://news.163.com/'
因为想要获取标题的文本内容,所以我们在网页中复制的xpath路径后,加上/text(),即:
content = selector.xpath('//*[@id="js_top_news"]/div[2]/h2/a/text()')
完整代码如下:
#1、导入需要用到的库
import requests
from lxml import etree
#2、确定URL和请求头
url = 'https://news.163.com/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36',
'Referer': 'https://news.163.com/'}
#3、编写获取数据的函数
def get_data(url):
#请求我们想要访问的url,并设置请求头
response = requests.get(url, headers=headers)
#防止获取到的网页数据乱码,通常用utf-8即可,中文的编码方式是gbk
response.encoding = 'gbk'
#设置选择器
selector = etree.HTML(response.text)
#编写获取具体内容的xpath路径
content = selector.xpath('//*[@id="js_top_news"]/div[2]/h2/a/text()')
#将获取到的数据打印出来
print(content)
#4、调用函数
get_data(url)
运行结果如下:
案例二:获取新浪新闻的网站数据
新浪新闻网址:
https://www.sina.com.cn/
新浪新闻标题内容对应的复制出来的xpath路径:
//*[@id="syncad_0"]/ul[1]/li[1]/a/
那么我们需要修改的两处代码如下:
url = 'https://www.sina.com.cn/'
因为想要获取标题对应的链接内容,而链接内容在标题a标签对应的href属性中,所以我们在网页中复制的xpath路径后,加上/@href,即:
content = selector.xpath('//*[@id="syncad_0"]/ul[1]/li[1]/a/@href')
完整代码如下:
#1、导入需要用到的库
import requests
from lxml import etree
#2、确定URL和请求头
url = 'https://www.sina.com.cn/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36',
'Referer': 'https://www.sina.com.cn/'}
#3、编写获取数据的函数
def get_data(url):
#请求我们想要访问的url,并设置请求头
response = requests.get(url, headers=headers)
#防止获取到的网页数据乱码,通常用utf-8即可,中文的编码方式是gbk
response.encoding = 'gbk'
#设置选择器
selector = etree.HTML(response.text)
#编写获取具体内容的xpath路径
content = selector.xpath('//*[@id="syncad_0"]/ul[1]/li[1]/a/@href')
#将获取到的数据打印出来
print(content)
#4、调用函数
get_data(url)
运行结果:
怎么样,可爱丸自创的这个python爬虫万能通用公式还是挺实用的吧?大家赶紧也自己动手试一试吧!如果你觉得本期教程对你有用的话,记得关注我给我点个赞哦,有任何问题也都可以在评论区给我留言,想有想学习的教程也可以在评论区告诉我哦,我看到会第一时间回复大家哒~
感谢大家的支持,我们下期见哦!
转载:https://blog.csdn.net/qq_34120459/article/details/117392317