Python - поиск лучшей цены на сайте

1

У меня есть куча неиспользуемых паровых ключей, и я пытаюсь написать небольшой скрипт python для поиска лучших цен каждой игры, которую я владею на некоторых из самых дешевых сайтов паролей. На данный момент я попытался в качестве примера найти лучшие цены на g2a. Скрипт работает почти отлично (да, иногда возврат одной цены не совсем возвращает цену за игру, которой я владею, но это не главная проблема). Проблема в том, что кажется, что я не могу правильно искать веб-страницу, когда часть имени содержит специальные символы. Я попытался удалить специальные символы, но проблема все еще существует. Какие-нибудь советы?

Это мой сценарий:

import pandas as pd
import sys
from urllib.request import urlopen, Request
from bs4 import BeautifulSoup
import urllib.parse
carica = pd.read_csv("list.csv")
rows=0
pageh = urlopen(Request('https://www.google.com'))
while rows<len(carica)-1:

#while rows<3:
  rows=rows+1
  filename = (carica.values[rows,0])
  filename = filename.replace(",","")
  filename = filename.replace(" ","%20")
  filename = filename.replace("'","")
  if filename is None:filename='Demo'


  quote_page = ('https://www.g2a.com/en-us/search?query='+filename)


  try:page = urlopen(Request(quote_page, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30'}))
  except IOError: page=pageh

  soup = BeautifulSoup(page,'html.parser')


  namea = carica.values[rows,0]
  pricea = soup.find(class_='Card__price-cost price')
  if pricea is None:pricea.text='non trovato'
  testo='\x1b[0m' + carica.values[rows,0] + '\x1b[0m'
  print(testo, '-->', pricea.text)

Версия его, включая список игр, находится здесь: https://repl.it/@PaoloVeronesi/g2a-prices

  • 1
    Какие специальные символы вы пытаетесь удалить? Вы смотрели на написание регулярного выражения?
  • 0
    Я не знаю, какие именно персонажи вызывают проблему. Если я использую эту строку, например (Small Town Terror: Galdor's Bluff Collector's Edition), страница не будет найдена.
Показать ещё 2 комментария
Теги:
beautifulsoup
price

1 ответ

1

Вы не должны выполнять эту строковую "цитату" вручную - имеется специальный набор функций библиотеки, доступных для этого в Python - quote() или quote_plus() из модуля urllib.parse:

In [1]: from urllib.parse import quote

In [2]: s = "Small Town Terrors: Galdor Bluff Collector Edition"

In [3]: quote(s)
Out[3]: 'Small%20Town%20Terrors%3A%20Galdor%27s%20Bluff%20Collector%27s%20Edition'

In [4]: quote_plus(s)
Out[4]: 'Small+Town+Terrors%3A+Galdor%27s+Bluff+Collector%27s+Edition'

Или, что еще лучше, было бы переключиться на использование пакета requests, который просто сделал бы цитату неявно и под капотом.

  • 0
    Я попробовал это, поэтому я импортирую urllib.parse в начале. Но это все равно не работает.
  • 0
    @ user8472609 ну, я думаю, что quote() на самом деле делает это правильно по сравнению с тем, что вы опубликовали - например, посмотрите, как одиночная кавычка становится %27 , но вы просто заменяете ее пустой строкой. Между прочим, я получаю тот же цитируемый query что и при поиске « Ужасов Small Town Terrors: Galdor's Bluff Collector's Edition Galdor Small Town Terrors: Galdor's Bluff Collector's Edition на самом сайте: g2a.com/en-us/… .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню