xin_chengl 2025-12-16 22:18 采纳率: 0%
浏览 3

爬虫猪八戒遇到的疑惑,求佬解答

我在爬取猪八戒网站时候。text一直返回的是空集,这是为什么呀?


import requests
from lxml import etree
import time
import random
url = "https://www.zbj.com/fw/?k=爬虫"
resp = requests.get(url)
resp_text = resp.text
etree = etree.HTML(resp_text)
divs = etree.xpath('//*[@id="__layout"]/div/div[3]/div[1]/div[4]/div/div[2]/div/div[2]/div')
for div in divs:
    price = div.xpath('./div/div[3]/div[1]/span/text()')[0].strip("¥")
    if not price:
        continue
    company = div.xpath('./div/div[5]/div[1]/div[1]/div/text()')[0]
    text = div.xpath('../div/div[3]/div[2]/div/span//text()')
    print(company, price, text)
    time.sleep(random.uniform(1, 3))

返回:

八戒软件开发服务 880 []
畅序丨包售后按需定制满意付款 100 []

  • 写回答

1条回答 默认 最新

  • 关注

    核心就俩问题,超好解决:

    1. 页面是JS动态加载的!requests只能抓静态源码,你要的text内容是加载后才生成的,resp.text里根本没有,xpath自然捞空;
    2. xpath路径错了,../回退层级容易乱,手写路径大概率对不上。

    解决步骤:
    ① 先加个请求头伪装浏览器(防反爬+基础准备):

    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}
    resp = requests.get(url, headers=headers)
    

    ② 换Playwright/Pyppeteer爬动态页面(必做!),这俩能模拟浏览器加载JS,拿到完整页面;
    ③ xpath别手写了:浏览器F12→Elements里找到目标text元素→右键→Copy Xpath,直接用复制的路径。

    按这三步来,包准能拿到text内容~

    评论

报告相同问题?

问题事件

  • 创建了问题 12月16日