我可以解析页面

发布于 2025-02-07 13:27:40 字数 1450 浏览 1 评论 0原文

我不能解析广告标题。我想从OLX解析页面(就像在独联体国家一样),然后将其写入CSV文件。我已经写了两个功能,一个获取页面,另一个查找名称,我想测试它,但是我有某种错误,如果您帮助我,我会很感激。

import requests
from bs4 import BeautifulSoup
import csv

HOST = 'https://www.olx.ua/'
URL = 'https://www.olx.ua/d/zhivotnye/sobaki/'
HEADERS = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
}


def get_html(url, params=''):
    r = requests.get(url, headers=HEADERS, params=params)
    return r

def get_content(html):
    soup = BeautifulSoup(html, 'html.parser')
    items = soup.find_all('div', class_='css-19ucd76') # Parsing the entire ad.
    animal = []

    for item in items:
        animal.append(
            {
                'Title': item.find('div', class__='css-u2ayx9').get_text(strip=True) # Name parsing.
            }
        )
   
 return animal
html = get_html(URL)
print(get_content(html.text))

CSS -19UCD76 - 这是一个广告。 css -u2ayx9 - 这是标题。

Это ошибка: 'title': item.find('div', class__='css-u2ayx9').get_text(strip=True)
AttributeError: 'NoneType' object has no attribute 'get_text'

在此处输入图像描述

I can't parse ad titles. I want to parse pages from OLX (It's like ebay only in the CIS countries), and write them to a csv file. I already wrote two functions, one gets the page, the other looks for names, I wanted to test it, but I have some kind of error, I will be grateful if you help me.

import requests
from bs4 import BeautifulSoup
import csv

HOST = 'https://www.olx.ua/'
URL = 'https://www.olx.ua/d/zhivotnye/sobaki/'
HEADERS = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
}


def get_html(url, params=''):
    r = requests.get(url, headers=HEADERS, params=params)
    return r

def get_content(html):
    soup = BeautifulSoup(html, 'html.parser')
    items = soup.find_all('div', class_='css-19ucd76') # Parsing the entire ad.
    animal = []

    for item in items:
        animal.append(
            {
                'Title': item.find('div', class__='css-u2ayx9').get_text(strip=True) # Name parsing.
            }
        )
   
 return animal
html = get_html(URL)
print(get_content(html.text))

css-19ucd76 - This is an ad.
css-u2ayx9 - This is the title.

Это ошибка: 'title': item.find('div', class__='css-u2ayx9').get_text(strip=True)
AttributeError: 'NoneType' object has no attribute 'get_text'

enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

北风几吹夏 2025-02-14 13:27:40

尝试避免在此类类中选择HTML中的动态零件,并更改您的策略以选择更多静态零件,例如标签或ID。

使用的CSS选择器获取卡sop.select('div [dagation-cy =“ l-card”]')和通过h6 标签名称:

for item in soup.select('div[data-cy="l-card"]'):
    animal.append(
        {
            'Title': item.h6.get_text(strip=True) # Name parsing.
        }
    )
示例
import requests
from bs4 import BeautifulSoup
import csv

HOST = 'https://www.olx.ua/'
URL = 'https://www.olx.ua/d/zhivotnye/sobaki/'
HEADERS = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
}


def get_html(url, params=''):
    r = requests.get(url, headers=HEADERS, params=params)
    return r

def get_content(html):
    soup = BeautifulSoup(html, 'html.parser')

    animal = []

    for item in soup.select('div[data-cy="l-card"]'):
        animal.append(
            {
                'Title': item.h6.get_text(strip=True) # Name parsing.
            }
        )
   
    return animal
html = get_html(URL)
print(get_content(html.text))
输出
[{'Title': 'Бульдог французский'}, {'Title': 'Цуценя д/ш німецької вівчарки, дівчинка від Чемпіонів.'}, {'Title': 'Цуценята Лабрадор (золотистий ретривер)'}, {'Title': 'Два мини мальчика'}, {'Title': 'Мальтипу Девочка'}, {'Title': 'Бесподобный кукольный мишка мальтипу F1 мини беби фейс'}, {'Title': 'Собачий поводок   10 метров SOLOGNAC'}, {'Title': 'Йорк Девочка КСУ'}, {'Title': 'Красуня Мальтіпу'}, {'Title': "Джек Рассел тер'єр ( цуценята)"}, {'Title': 'Щенки Той Пуделя. Документы Харьков'}, {'Title': 'Продам Той пудель'}, {'Title': 'Щенки мопса,мопсики детки,мопс'}, {'Title': 'Мальчик 6,5 месяцев'}, {'Title': 'Продам йорка девочку'}, {'Title': 'Цвергшнауцер-подниматель настроения'}, {'Title': 'Померансккий шпиц девочка.'}, {'Title': 'Ошейник для собак из полиуретана SOLOGNAC'}, {'Title': 'Очень крутая девочка Американский булли'}, {'Title': 'Девочка померанского шпица'}, {'Title': 'Німецька вівчарка'}, {'Title': 'Немецкая овчарка'}, {'Title': 'Продаю щенков'}, {'Title': 'Щенки мопса предварительная бронь'}, {'Title': 'Розпродаю свою коллекцию пионов по доступным ценам'}, {'Title': 'Готовы для бронирования бигли'}, {'Title': 'Продам цуценят дратхаар (німецький жорсткошерстий лягавий)'}, {'Title': 'Вівчарки  цуценятя 12.06.22 року народженя'}, {'Title': 'Собачки Підбультерер'}, {'Title': 'Крошка той пудель'}, {'Title': 'Шпиц мишка'}, {'Title': 'Неймовірні  цуценята  Акіта-іну'}, {'Title': 'Сибірські хаскі'}, {'Title': 'Чихуахуа МИНИ 3 месяца'}, {'Title': 'Английского бульдога щенки. КСУ. Киев'}, {'Title': 'восточно европейская овчарка'}, {'Title': 'Очаровательная микро девочка'}, {'Title': 'Щенки аргентинского дога'}, {'Title': 'Металлический доберман'}, {'Title': 'СТАФфтерьер породные чистокровные щенки АСТ'}, {'Title': 'Цуценята німецької вівчарки робочого розведення. Чемпіонські крові.'}, {'Title': 'Померанский шпиц'}, {'Title': 'французский бульдог lux'}, {'Title': 'Французский бульдог носитель флаффи девочки'}, {'Title': 'Супер щенок пудель той'}, {'Title': 'Породные шоколадные щенки Питомник.'}, {'Title': 'перспективный мальчик немецкой овчарки'}, {'Title': 'Девочка померанского шпица'}, {'Title': 'Щенки МАЛЬТЕЗЕ , мальтийская болонка'}, {'Title': 'питомник.'}, {'Title': 'Сладкая модуленция и светлый редкий окрас. Девочка-Померанка'}, {'Title': 'Мальчик маленький предлагается к бронированию'}]

Try to avoid selecting on dynamic part in HTML as such classes and change your strategy to select more static parts like tags or by id.

Used css selectors get the cards soup.select('div[data-cy="l-card"]') and selected title by h6 tag name:

for item in soup.select('div[data-cy="l-card"]'):
    animal.append(
        {
            'Title': item.h6.get_text(strip=True) # Name parsing.
        }
    )
Example
import requests
from bs4 import BeautifulSoup
import csv

HOST = 'https://www.olx.ua/'
URL = 'https://www.olx.ua/d/zhivotnye/sobaki/'
HEADERS = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
}


def get_html(url, params=''):
    r = requests.get(url, headers=HEADERS, params=params)
    return r

def get_content(html):
    soup = BeautifulSoup(html, 'html.parser')

    animal = []

    for item in soup.select('div[data-cy="l-card"]'):
        animal.append(
            {
                'Title': item.h6.get_text(strip=True) # Name parsing.
            }
        )
   
    return animal
html = get_html(URL)
print(get_content(html.text))
Output
[{'Title': 'Бульдог французский'}, {'Title': 'Цуценя д/ш німецької вівчарки, дівчинка від Чемпіонів.'}, {'Title': 'Цуценята Лабрадор (золотистий ретривер)'}, {'Title': 'Два мини мальчика'}, {'Title': 'Мальтипу Девочка'}, {'Title': 'Бесподобный кукольный мишка мальтипу F1 мини беби фейс'}, {'Title': 'Собачий поводок   10 метров SOLOGNAC'}, {'Title': 'Йорк Девочка КСУ'}, {'Title': 'Красуня Мальтіпу'}, {'Title': "Джек Рассел тер'єр ( цуценята)"}, {'Title': 'Щенки Той Пуделя. Документы Харьков'}, {'Title': 'Продам Той пудель'}, {'Title': 'Щенки мопса,мопсики детки,мопс'}, {'Title': 'Мальчик 6,5 месяцев'}, {'Title': 'Продам йорка девочку'}, {'Title': 'Цвергшнауцер-подниматель настроения'}, {'Title': 'Померансккий шпиц девочка.'}, {'Title': 'Ошейник для собак из полиуретана SOLOGNAC'}, {'Title': 'Очень крутая девочка Американский булли'}, {'Title': 'Девочка померанского шпица'}, {'Title': 'Німецька вівчарка'}, {'Title': 'Немецкая овчарка'}, {'Title': 'Продаю щенков'}, {'Title': 'Щенки мопса предварительная бронь'}, {'Title': 'Розпродаю свою коллекцию пионов по доступным ценам'}, {'Title': 'Готовы для бронирования бигли'}, {'Title': 'Продам цуценят дратхаар (німецький жорсткошерстий лягавий)'}, {'Title': 'Вівчарки  цуценятя 12.06.22 року народженя'}, {'Title': 'Собачки Підбультерер'}, {'Title': 'Крошка той пудель'}, {'Title': 'Шпиц мишка'}, {'Title': 'Неймовірні  цуценята  Акіта-іну'}, {'Title': 'Сибірські хаскі'}, {'Title': 'Чихуахуа МИНИ 3 месяца'}, {'Title': 'Английского бульдога щенки. КСУ. Киев'}, {'Title': 'восточно европейская овчарка'}, {'Title': 'Очаровательная микро девочка'}, {'Title': 'Щенки аргентинского дога'}, {'Title': 'Металлический доберман'}, {'Title': 'СТАФфтерьер породные чистокровные щенки АСТ'}, {'Title': 'Цуценята німецької вівчарки робочого розведення. Чемпіонські крові.'}, {'Title': 'Померанский шпиц'}, {'Title': 'французский бульдог lux'}, {'Title': 'Французский бульдог носитель флаффи девочки'}, {'Title': 'Супер щенок пудель той'}, {'Title': 'Породные шоколадные щенки Питомник.'}, {'Title': 'перспективный мальчик немецкой овчарки'}, {'Title': 'Девочка померанского шпица'}, {'Title': 'Щенки МАЛЬТЕЗЕ , мальтийская болонка'}, {'Title': 'питомник.'}, {'Title': 'Сладкая модуленция и светлый редкий окрас. Девочка-Померанка'}, {'Title': 'Мальчик маленький предлагается к бронированию'}]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文