当前位置: 首页 > 知识库问答 >
问题:

如何处理网页抓取中缺少元素的网页?请参阅下面的代码

闽哲
2023-03-14

我写了这段代码来从Flipkart的手机类别中抓取数据。我面临的问题是当元素在那里时会出现属性错误(“属性错误:'NoneType'对象没有属性'text'”)。我如何修改此代码才能工作。如果有元素,我需要将数据填充为“不可用”。请参阅下面的代码。我是编程初学者,任何帮助都将不胜感激。

'''

导入请求

从bs4导入BeautifulSoup

导入csv

进口再

base_url=”https://www.flipkart.com/search?q=mobiles

定义get_urls():以开放(“翻转数据.csv”,“a”)为csv_file:

    writer = csv.writer(csv_file)

    writer.writerow(
        ['Product_name', 'Price', 'Rating', 'Product-url'])

    for page in range(1, 510):

        page = base_url + str(page)

        response = requests.get(page).text

        soup = BeautifulSoup(response, 'lxml')

        for product_urls in soup.find_all('a', href=True, attrs={'class': '_1fQZEK'}):
            name = product_urls.find('div', attrs={'class': '_4rR01T'}).text


            price = product_urls.find('div', attrs={'class': '_30jeq3 _1_WHN1'}).text
            price = re.split("\₹", price)
            price = price[-1]


            rating = product_urls.find('div', attrs={'class': '_3LWZlK'}).text


            item_url = soup.find('a', class_="_1fQZEK", target="_blank")['href']

            item_url = " https://www.flipkart.com" + item_url

            item_url = re.split("\&", item_url)

            item_url = item_url[0]


            print(f'Product name is {name}')

            print(f'Product price is {price}')

            print(f'Product rating is {rating}')

            print(f'Product url is {item_url}')


            writer.writerow(
                [name, price, rating, item_url])

get_urls()

'''

共有1个答案

廉子民
2023-03-14

看起来您可能会尝试使用try/catch异常处理包围字符串,如果有这样的属性错误,并使用除外块将字符串设置为“不可用”当有异常时。

import requests

from bs4 import BeautifulSoup

import csv

import re

base_url = "https://www.flipkart.com/search?q=mobiles&page="

def get_urls(): 
    csv_file = open("fliplart-data.csv", "a")
    writer = csv.writer(csv_file)

    writer.writerow(
        ['Product_name', 'Price', 'Rating', 'Product-url'])

    for page in range(1, 510):

        page = base_url + str(page)

        response = requests.get(page).text

        soup = BeautifulSoup(response, 'lxml')

        for product_urls in soup.find_all('a', href=True, attrs={'class': '_1fQZEK'}):
            
            #name
            try:
                name = product_urls.find('div', attrs={'class': '_4rR01T'}).text
            except Exception as e:
                name = "Not Available"

            #price
            try:
                price = product_urls.find('div', attrs={'class': '_30jeq3 _1_WHN1'}).text
                price = re.split("\₹", price)
                price = price[-1]
            except Exception as e:
                price = "Not Available"

            #rating
            try:
                rating = product_urls.find('div', attrs={'class': '_3LWZlK'}).text
            except Exception as e:
                rating = "Not Available"
            #item_url
            try:
                item_url = soup.find('a', class_="_1fQZEK", target="_blank")['href']
                item_url = " https://www.flipkart.com" + item_url
                item_url = re.split("\&", item_url)
                item_url = item_url[0]
            except Exception as e:
                item_url = "Not Available"

            print(f'Product name is {name}')
            print(f'Product price is {price}')
            print(f'Product rating is {rating}')
            print(f'Product url is {item_url}')


            writer.writerow(
                [name, price, rating, item_url])

get_urls()

输出

Product name is intaek 5616
Product price is 789
Product rating is Not Available
Product url is  https://www.flipkart.com/kxd-m1/p/itm89bbc238d6356?pid=MOBFUXKG3DYVZRQV

从抓取结果来看,实际数据与它所说的URL不匹配。这可能也是您遇到的问题的一部分。

 类似资料:
  • 我是python新手,正在尝试从以下站点获取数据。虽然这段代码适用于不同的站点,但我无法让它适用于nextgen stats。有人想知道为什么吗?下面是我的代码和我得到的错误 下面是我得到的错误 df11=pd。读取html(urlwk1)回溯(上次调用):文件“”,第1行,在文件“C:\Users\USERX\AppData\Local\Packages\PythonSoftwareFounda

  • 我正试图使用此代码从消费者事务评论网站收集评论。但我不断地出错,特别是在dateElements中 这就是我得到的错误 回溯(最后一次调用):文件“C:/Users/Sara Jitkresorn/PycharmProjects/untitled/venv/caffirs.py”,第37行,jsonData=json。加载(dateElements)文件“C:\Users\Sara-Jitkres

  • 我正在尝试使用preg_match当前只检索1个值(在我开始检索多个值之前),但是,我没有运气。执行print_r()时,数组中没有存储任何内容。 以下是我目前正在尝试的代码: 所需输出: 我的上述代码不起作用。在这方面的任何帮助都将不胜感激。提前感谢。

  • 问题内容: 我正在尝试开发一个简单的网页抓取工具。我想提取没有代码的文本。我实现了这个目标,但是我发现在某些加载了的页面中,我没有获得良好的结果。 例如,如果一些代码添加了一些文本,则看不到它,因为当我调用 我得到的原始文本没有添加文本(因为在客户端执行了)。 因此,我正在寻找一些解决此问题的想法。 问题答案: 一旦安装了,请确保二进制文件在当前路径中可用: 例 举个例子,我用以下HTML代码创建

  • 我正在尝试使用Selenium从页面中提取数据。我上周做了,但这周有些变化,现在它不再工作了。问题是“显示更多”按钮,或者你们可以在网站上看到的“Prikaži broj”。我有多个页面要刮,但让我们集中在一个。 代码是: 上周它和xpath一起工作,但现在不行了。我甚至找到了一个按钮,但它没有点击:

  • image元素 alt属性,src属性 complete属性 height属性,width属性 naturalWidth属性,naturalHeight属性 audio元素,video元素 image元素 alt属性,src属性 alt属性返回image元素的HTML标签的alt属性值,src属性返回image元素的HTML标签的src属性值。 // 方法一:HTML5构造函数Image var