使用XPath爬虫技术实现套图网站百度网盘地址与提取码的自动化收集

案例一:

使用XPath爬虫技术实现套图网站百度网盘地址与提取码的自动化收集

某套图网站,套图是以封面的形式展现在页面上的。首先需要依次点击套图,接着点击广告盘链接,最后就能到达百度网盘展示页面。

这一过程依靠爬虫得以实现,要收集百度网盘的地址以及提取码,并且采用的是 xpath 爬虫技术。

首先分析图片列表页,此页按照更新先后顺序暂时套图封面,接着查看 HTML 结构。每一组“li”都对应一组套图。属性 href 后面就是套图的内页地址(也就是广告盘链接页)。所以,我们得先获取列表页内所有的内页地址(即广告盘链接页)。

代码如下:

import requests 倒入requests库
导入 lxml 库(若未安装,可通过 pip install lxml 进行安装)。
请求地址为“https://www.xxxx.com/gc/”
使用 requests 库的 get 方法,传入参数 url=url,获取到的返回结果。
wb_data 等于 response.text,这是文本展示返回的结果。
html 把 wb_data 转换成了文档树。
这一步的意思是,将 class 为“clearfix”下所有具有“href”属性的内容赋值给“b”,因为我们的目标内容都呈现在 class“clearfix”之下,并且位于 href 属性之后。
print(b) 打印b,这里的b是一个数组
print(b[0]) 打印b的第一项数据

执行结果:成功返回所有内页

打开内页,也就是广告盘链接页,这样就能获取广告盘地址。图中红色箭头所指的并非真正的百度盘页,只有点击之后才能够看到百度盘的地址。因此,在这一步骤中,只需抓取红色箭头所指向的内容地址即可。

代码如下:

该 url 为“https://www.xxxx.com/gc/toutiao/87098.html”。
使用 requests 库发送 GET 请求,请求的 URL 为指定的 url,获取到的响应赋值给 response 变量。
将页面转换成文档树,具体操作为 wb_data = response.text
html = etree.HTML(wb_data)
b 等于通过 html.xpath 方法获取到的 //div[@class = "pictext"] 下的所有 @href 属性值。
需要注意的是,在 class = "pictext" 下存在两个 href。我们仅需第一个 href 的值,所以先将其赋值给 b[1],然后再把返回值赋值给 c,并取第二项数据。
print(c)

执行结果:成功返回所有内页

获取到广告盘地址后,接下来需要打开该地址,以抓取百度盘的真实地址。链接和提取码分别在两个不同的元素里,最终会返回两组数据。

代码如下:

url = "http://xxx.la/xam9I6"
response = requests.get(url= url)
wb_data = response.text
# 将页面转换成文档树
html = etree.HTML(wb_data)
b 等于通过 html.xpath('//tr/td/text()')所获取到的内容。
c=b[6]#提取码
d 等于通过 html 进行 xpath 操作所获取的 //tr//@href 的内容,这是百度地址。
print(c)
print(d)

注意,这里 html.xpath 的写法与上面存在差异,目标元素的上级没有 class,所以只能进行模糊取值。

提取码的 HTML 结构如图所示,其结构为//tr/td/,单/表示父节点下的子节点,双/表示父节点后的子孙节点。提取码是 tr 的子节点。然而,在这个结构下存在很多组数据,最终会输出一个数组 b(参照上面代码 b)。这样,我们就能找到提取码位于数组序列中,并将其赋值给 c(参照上面代码 c),从而获得真实的百度盘地址。

网盘地址有 href 属性,所以相对好爬一些。只要注意/的数量就可以了。

把以上步骤组合成一个脚本时,会涉及到函数与函数之间的参数传递以及循环方面的问题。以下是直接贴出的代码。

# -*-coding:utf8-*-
# encoding:utf-8
import requests
from lxml import etree
“https://www.xxx.com/gc/qt/83720.html”被赋值给 firstlink 。
AA 包含“https://www.xxx.com/gc/”。
"https://www.xxx.com/gc/index_2.html" 这个链接
"https://www.xxx.com/gc/index_3.html" 这是一个特定的链接地址。它指向了一个特定的网页。该网页位于 "https://www.xxx.com/gc/" 路径下,并且文件名是 "index_3.html" 。
 "https://www.xxx.com/gq/",
"https://www.xxx.com/gq/index_2.html" 这个链接。
"https://www.xxx.com/gq/index_3.html" 这个链接指向特定的网页。它可能是一个关于特定主题或内容的索引页面。该页面可能包含各种相关的信息或链接,以供用户浏览和获取所需的内容。
该链接为 https://www.xxx.com/gq/index_4.html 。
#第1步,获取第一页面所有的地址
def stepa (AA):
 lit=[]
 for url in AA:
使用 requests 库发送一个 GET 请求,请求的 URL 为指定的 url ,并将响应结果存储在 response 变量中。
  wb_data = response.text
  # 将页面转换成文档树
  html = etree.HTML(wb_data)
通过 html 的 xpath 方法获取类名为“clearfix”的 ul 元素下的所有 href 属性值,将其赋值给变量 a 。
  lit.append(a)
 return(lit) 
alllink = stepa(AA)
#第2步,获取的地址,循环读取打开,从而获取百度网盘信息
def stepb(alllink,firstlink):
 for list in alllink:
  for url in list:
   if url in firstlink:
    continue
   elif "www" in url:
    url2 = url
   else:
url2 等于 "https://www.xxx.com" 加上 url 。
使用 requests 库发送 GET 请求,请求的 URL 为 url2,将返回的响应赋值给 response 变量。
将页面转换成文档树,此操作的结果赋值给 wb_data,即 wb_data = response.text
   html = etree.HTML(wb_data)
b 等于通过 html.xpath 找到的所有 class 为 "pictext" 的 div 元素中的 href 属性值。
   c = b[1]
   #print(c)
   #获取到广告页地址
   url3 = c
使用 requests 库发送 GET 请求,请求的 URL 为 url3,获取到的响应赋值给 response 变量。
   wb_data = response.text
   # 将页面转换成文档树
   html = etree.HTML(wb_data)
使用 html 的 xpath 方法获取到的内容是 //tr/td 下的文本,这些文本存储在变量 d 中。
   #print(d)
   e=d[6]#获取提取码
通过 html.xpath('//tr//@href') 来获取地址 f 。
   test = e[-5:]#提取码值只保留提取码(4位)
test2 等于 f 的最后一个元素,即链接只保留链接内容,去掉前后的['']
test3 由 test2 和 test#拼接而成,从而形成一条数据,这条数据包含了链接和提取码。
   print(test3)
打开文件'C:/Users/Beckham/Desktop/python/1.txt',以追加模式'a'打开,并设置编码为'utf-8',将其赋值给变量 w 。
    w.write('\n'+test3)
    w.close()
stepb(alllink,firstlink)
#第3步:提示爬取完成
def over():
 print("ok")
over()

需要注意的地方:

return 的用法是,如果要将函数生成的值传递给后面的函数使用,就需要返回这个值。例如,在 def stepa 中定义的 a 为爬取的套图封面地址(通过打开这个地址可进行下一步),那么就需要用 return(a)来返回 a 的值,不然执行后就没有数据。

Continue 的应用情况是,由于第一个套图地址打开后其内容中没有目标内容,若找不到元素就会报错。因此,在读取套图地址时需要跳过第一个地址。可以添加一个 if 判断,当第一个地址等于事先定义好的非正常地址时,就跳过这个循环。

打印结果:

案例二:

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

31阅读

外国教程python,python编程教学视频

2026年09月02日

25阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

27阅读

python教程大全集,python教程600集

2026年09月02日

26阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

22阅读