Найти - Пользователи
Полная версия: парсинг авито
Начало » Python для новичков » парсинг авито
1 2 3
xam1816
py.user.next
Он не так прост, как кажется
его код я подправил и у меня печатает ссылки на объявления по запросу
просто он тупо не может запустить свой файл, ему надо input() в конце прописать, может его код срабатывает и закрывается, как это бывает в виндовском терминале
roobee147
 parcer2.py : Имя "parcer2.py" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность пути, после че
го повторите попытку.
строка:1 знак:1
+ parcer2.py
+ ~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (parcer2.py:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
 
Suggestion [3,General]: Команда parcer2.py не найдена, однако существует в текущем расположении. По умолчанию оболочка Windows PowerShell не загружает команды из текущего расположения. Если вы уверены 
в надежности команды, введите ".\parcer2.py". Для получения дополнительных сведений вызовите справку с помощью команды "get-help about_Command_Precedence".
py.user.next
xam1816
его код я подправил и у меня печатает ссылки на объявления по запросу
Ну, вот ты мой код запусти короткий. Твой-то я запускал, ничего не выводит у меня, потому что нет там в ответе классов этих.
  
>>> from bs4 import BeautifulSoup
>>> import requests
>>> 
>>> def f():
...     product = input()
...     url = "https://www.avito.ru/rossiya?q=" + product
...     request = requests.get(url)
...     bs = BeautifulSoup(request.text, "html.parser")
...     all_links = bs.find_all('div', class_='iva-item-titleStep-pdebR')
...     for link in all_links:
...         a = link.find('a', href=True)
...         if a:
...             print('https://www.avito.ru' + a['href'])
... 
>>> f()
cat
>>> f()
кошка
>>>

roobee147
parcer2.py : Имя "parcer2.py" не распознано как имя командлета
Не используй PowerShell. Вот ты запускал нормально, через cmd.exe.
roobee147
Ебал я в рот этот питон, всем спасибо, топик закрыт.
py.user.next
Тут дело в винде. Так-то полинтернета на питоне работает. Instagram, YouTube и так далее. А винду пишут индийцы дешёвые, поэтому там периодически обновления ломают систему саму, нет совместимости между частями системы, отовсюду торчат уши тридцатилетней давности типа этих однобайтовых кодировок (из-за которых-то и надо эти пути с русских букв на английские переделывать). Такой у них бизнес: побыстрее сделать и продать, а дальше хоть трава не расти. PowerShell, например, проверяет скрипты перед запуском, даже если его не просишь об этом. Поэтому если он не настроен правильно, он может тебе просто вырубать скрипты, хотя ты его об этом не просишь. И вот такой тупости там всякой вагон и маленькая тележка.
roobee147
py.user.next
Тут дело в винде. Так-то полинтернета на питоне работает. Instagram, YouTube и так далее. А винду пишут индийцы дешёвые, поэтому там периодически обновления ломают систему саму, нет совместимости между частями системы, отовсюду торчат уши тридцатилетней давности типа этих однобайтовых кодировок (из-за которых-то и надо эти пути с русских букв на английские переделывать). Такой у них бизнес: побыстрее сделать и продать, а дальше хоть трава не расти. PowerShell, например, проверяет скрипты перед запуском, даже если его не просишь об этом. Поэтому если он не настроен правильно, он может тебе просто вырубать скрипты, хотя ты его об этом не просишь. И вот такой тупости там всякой вагон и маленькая тележка.
Ну все равно спасибо тебе
Rodegast
xam1816
if a := link.find('a', href=True):
Никогда не используй оператор := Это не по феншую.
ZerG
тут только с ТГ бота работет
py.user.next
Rodegast
Никогда не используй оператор := Это не по феншую.
У меня он вообще не срабатывает.
  
>>> if x := 1:
  File "<stdin>", line 1
    if x := 1:
          ^
SyntaxError: invalid syntax
>>>
При этом у меня не самый старый питон. То есть обновлять питон ради одной строчки в одном скрипте я бы не стал.

xam1816, представь просто, что твой скрипт попадает в локальную сеть, про которую ты даже не знаешь, что она вообще существует (таких сетей примерно десятки тысяч), где стоит питон среднего возраста там на пятидесяти компьютерах примерно. Ты думаешь, все бросятся обновлять эту сеть? Не, они просто выкинут твой скрипт и возьмут другой. Может быть, просто перепишут твой скрипт в более генерализованную форму, а может, просто скажут “а что нам возиться сейчас с этим? у нас сейчас на это времени нет, нам сейчас надо какую-нибудь бактериологическую или геологическую хрень считать, так что давайте другой скрипт возьмём”. И всё. Твой скрипт вот так и помрёт. Там не подошёл, тут не подошёл - и всё, про него забыли. А работает везде в итоге что-то другое, более простое и так далее. Вот то, что запускается везде, вот оно и будет жить. Посмотри на Linux, которая на любом пылесосе, телевизоре, холодильнике сейчас стоит. А Windows там нет, хотя они бы очень хотели просунуть её где только можно, даже смартфон пытались сделать свой. Linux везде живёт, потому что она везде ставится, ко всему адаптируется легко. Это не говоря о том, что она у всех в кармане сейчас находится в виде Android, а они даже не знают об этом, что это Linux. Питон точно так же распространился, его легко ставить везде, он везде подходит, для него ничего не надо. Чем проще, тем лучше.

Что касается самого оператора присваивания. В питон он такой “неудобный” изначально не потому, что про него не знали и поэтому не додумались его реализовать. Питон как раз делали по образу и подобию сишника (в котором этот оператор был изначально) только с ООП-инструментами и расширениями. И добавили его сейчас не потому, что его там не было и его забыли сделать, а потому, что он всё-таки иногда кому-то нужен. В сишнике тоже, знаешь, оператор goto не стали вырезать точно по той же причине. Не потому, что его удобно там использовать и так далее, а потому, что иногда каким-то профи он очень нужен и они его используют при этом, очень хорошо себе представляя, какой вред он наносит, когда он испольуется в повседневной разработке.

Сделай import this и перечитай все правила
Вот там есть правило
Flat is better than nested.

Умный код - это не тот, в котором мало строчек. Умный код - это тот, который после его написания легко дописывать дальше. Соответственно, какое-то присваивание отдельное можно легко заменить на вызов функции.

Вот пример, как дописывается код
Было
  
x = 4
 
if x > 3:
    print(x)
Стало
  
def f(x):
    return x ** 2
 
x = f(2)
 
if x > 3:
    print(x)
Особенность дописывания кода здесь в том, что весь оператор if вообще никак не затрагивается. Если он проверен и гарантированно работает, то ничто его не нарушает. Он как работал, так и работает дальше. Его не надо снова проверять, он не менялся.

И вот пример, как дописывается код с “умными” вставками
Было
  
if (x := 4) > 3:
    print(x)
Стало
  
def f(x):
    return x ** 2
 
if (x := f(2)) > 3:
    print(x)
Оператор if поменялся. Теперь его снова надо проверять и подтверждать его правильную работу.

Теперь умножь эти все операторы if, for, while и так далее на тысячу. В коде их далеко не один обычно. В итоге ты будешь сидеть и проверять тысячу операторов, которые ты уже проверял раньше, повторно. Когда ты устанешь их проверять повторно уже десятый раз, ты перестанешь их проверять. Когда ты перестанешь их проверять, ты станешь наугад писать их и думать про них чисто теоретически, что они продолжают правильно работать после твоих изменений. Ну и, таким образом, у тебя в коде начнут появляться ошибки, про которые ты даже знать не будешь, которых изначально там не было.

Вот что такое умный код. Это такой код, который можно разрабатывать дальше в любом направлении, но который из-за этой продолжающейся разработки не нужно по сто раз перепроверять. И для этого специальные приёмы записи кода существуют.

А вот эти вложенные “умные” однострочники - это называется
го
вно
код
.

Ты бы книжки уже начал бы читать какие-нибудь. В них всё это расписано вдоль и поперёк.


tags: inline code
AD0DE412
Rodegast
Никогда не используй
лямбды генераторы списков матчинг фстринги и декораторы
… далеко можно зайти так. да?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB