爬取网页文本 返回结果总是空值

大家好,我在尝试批量爬取网页文本内容的时候,出现了返回结果总是空值等各种问题。我将描述我的思路,请各位帮我看看问题出在哪,谢谢大家!

我的操作思路:
①在51job上搜索关键词“审计、python”,得到搜索结果。

img

②我选取其中五个打开,准备爬取文本“职能类别:文本内容”。

img

③将爬取得到的文本保存成文件。

这是我的代码:

import codecs
from bs4 import BeautifulSoup
import requests
def extract_text_from_url(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.content, "lxml")
    element = soup.find("p", {"class": "fp"})
    if element is not None:
        text = element.get_text()
    else:
        text = ""  # 如果找不到元素,则将text设置为空字符串
    return text
def save_to_file(text):
    with codecs.open('C:\\Users\\admin\\Desktop\\pythonProject1\\result.txt', 'a', encoding='utf-8') as file:
        file.write(text + '\n')
urls = [
    "https://jobs.51job.com/shanghai/148861241.html?s=sou_sou_soulb&t=0_0&req=2b943e9e859becc6fe73170109835a73&timestamp__1258=QqjOY5D5GK3h8DlxGo4%2B21DR76Lr40%3Dw4D&alichlgref=https%3A%2F%2Fwe.51job.com%2F",
    "https://jobs.51job.com/shanghai/145793839.html?s=sou_sou_soulb&t=0_0&req=2b943e9e859becc6fe73170109835a73&timestamp__1258=n4%2BxRDuCitY4BiDlxGrbD9lFKbIVG7YD&alichlgref=https%3A%2F%2Fwe.51job.com%2F",
    "https://jobs.51job.com/chengdu/149238287.html?s=sou_sou_soulb&t=0_0&req=2b943e9e859becc6fe73170109835a73&timestamp__1258=iqRx2GDtGQG%3DKGNDQiTdr8wIzxUEx7Kx&alichlgref=https%3A%2F%2Fwe.51job.com%2F",
    "https://jobs.51job.com/dalian/148861240.html?s=sou_sou_soulb&t=0_0&req=2b943e9e859becc6fe73170109835a73&timestamp__1258=eqmxgDy7DQdiqAKG%3DD%2FFnheGwrSmYPbdq4D&alichlgref=https%3A%2F%2Fwe.51job.com%2F",
    "https://jobs.51job.com/suzhou/144412407.html?s=sou_sou_soulb&t=0_0&req=2b943e9e859becc6fe73170109835a73&timestamp__1258=YqjODvmD7YGXpqeqgDRhDA23NG8jDUOrD&alichlgref=https%3A%2F%2Fwe.51job.com%2F"
]

for url in urls:
    text = extract_text_from_url(url)
    save_to_file(text)

但是出现这种结果:

img

img

文档中无文本内容。

我尝试找到问题所在,首先查看了响应状态,结果是200,应该不是这个问题。

img

而后试验了下单独爬取某一页,发现打印结果是空值。

img

想请问下我的代码是哪些地方出现了问题,麻烦大家啦!

这种网站都有反爬检测的,你打印一下responsedata那儿看看返回的东西是不是你需要的

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/179263
  • 除此之外, 这篇博客: python中的抽象类中的 1.首先知道python中的抽象类其实就是一种代码规范,和前面两篇文章python中的单继承和python中的多继承说的都是一个道理归根到底都是为了代码规范,同样也是从Java中继承的思想,抽象类一般都是单继承,由于多个子类都需要继承同一个类,所以可以在抽象类中实现具体的方法,但是子类中还是要实现具体的方法,看下面的例子,抽象类中实现了文件打开和关闭操作,但是子类中还是定义了 读写功能,为了理解的简便还是可以直接理解成抽象类中不实现具体的方法,子类中必须实现具体的方法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • import abc #利用abc模块实现抽象类
    
    class All_file(metaclass=abc.ABCMeta):
        all_type='file'
        @abc.abstractmethod #定义抽象方法,无需实现功能
        def read(self):
            '子类必须定义读功能'
            with open('filaname') as f:
                pass
    
        @abc.abstractmethod #定义抽象方法,无需实现功能
        def write(self):
            '子类必须定义写功能'
            pass
    
    class Txt(All_file): #子类继承抽象类,但是必须定义read和write方法
        def read(self):
            print('文本数据的读取方法')
        def write(self):
            print('文本数据的读取方法')
    
    class Sata(All_file): #子类继承抽象类,但是必须定义read和write方法
        def read(self):
            print('硬盘数据的读取方法')
    
        def write(self):
            print('硬盘数据的读取方法')
    
    class Process(All_file): #子类继承抽象类,但是必须定义read和write方法
        def read(self):
            print('进程数据的读取方法')
    
        def write(self):
            print('进程数据的读取方法')
    
    wenbenwenjian=Txt()
    
    yingpanwenjian=Sata()
    
    jinchengwenjian=Process()
    
    #这样大家都是被归一化了,也就是一切皆文件的思想
    wenbenwenjian.read()
    yingpanwenjian.write()
    jinchengwenjian.read()
    
    print(wenbenwenjian.all_type)
    print(yingpanwenjian.all_type)
    print(jinchengwenjian.all_type)
    
    # 抽象类 : 规范
    # 一般情况下 单继承 能实现的功能都是一样的,所以在父类中可以有一些简单的基础实现
    # 多继承的情况 由于功能比较复杂,所以不容易抽象出相同的功能的具体实现写在父类中
    
    
    # 抽象类还是接口类 : 面向对象的开发规范 所有的接口类和抽象类都不能实例化
    # java :
    # java里的所有类的继承都是单继承,所以抽象类完美的解决了单继承需求中的规范问题
    # 但对于多继承的需求,由于java本身语法的不支持,所以创建了接口Interface这个概念来解决多继承的规范问题
    
    # python
    # python中没有接口类  :
      #  python中自带多继承 所以我们直接用class来实现了接口类
    # python中支持抽象类  : 一般情况下 单继承  不能实例化
      #  且可以实现python代码