Почему красивый суп, почтовый индекс и .sesebreing значения в неправильном порядке? - PullRequest
2 голосов
/ 16 октября 2019

Обновление

Я сейчас использую этот код

from bs4 import BeautifulSoup
import requests
res=requests.get("https://www.ebay.co.uk/sch/i.html?_from=R40&_nkw=Playstation+1&_sacat=0&_pgn=1")
soup=BeautifulSoup(res.text,'html.parser')
for item,price in zip(soup.select('.lvtitle>a'),soup.select('.lvprice.prc >span')):
    print(item.text + " : " + price.text.strip())

Он выводит цены и названия продуктов в действительно хорошем, удобном для чтения формате, но этовыводить его в порядке, отличном от того, как они отображаются на eBay.

Первые четыре вывода, которые дает скрипт,
(1) SONY PLAYSTATION 1 PS1 КОНСОЛЬ / Проверенная работа и контроллер / 3 БЕСПЛАТНЫХ ИГРЫ: £28,75 (2) Playstation 1 с играми, включая сбои: £ 20,00
(3) Оригинальный комплект Sony Playstation 1: £ 29,99
(4) Sony Playstation 1 PS1 Консоль, набор рабочих мест, AV TV Ведущий: £ 26,99

Но первые четыре элемента на eBay:
(1) SONY PLAYSTATION 1 PS1 КОНСОЛЬ / Протестированная работа и контроллер / 3 БЕСПЛАТНЫХ ИГРЫ £ 28,75 (2) Sony Playstation 1 PS1 Консоль Bundle Joblot AV TV Lead £ 26,99 (3)Консоль Sony Playstation 1 PS1 PSONE и ТВ-лидер AV TESTED WORKING £ 29.99 (4) НОВЫЙ СПИСОК Консоль Sony Playstation PS1 в штучной упаковке, 2 контроллера, 2 карты памяти, оригинальная демонстрация £ 44.99

Илиiginal Вопрос

Я хочу, чтобы веб-скребок нашел названия продуктов и цены на все 50 продуктов на странице - https://ebay.co.uk/sch/i.html?_from=R40&_nkw=Playstation+1&_sacat=0&_pgn=1

Я запустил этот код -

for post in soup.select("h3"):
    print (post)

- и здесь был вывод (было больше вывода, который я не включил).

<h3 class="header">Please enable JavaScript </h3>
<h3>Format</h3>
<h3 class="lvtitle"><a class="vip" href="https://www.ebay.co.uk/itm/SONY-PLAYSTATION-1-PS1-CONSOLE-Tested-Working-Controller-3-FREE-GAMES/303195399469?_trkparms=ispr%3D1&amp;hash=item4697daa52d:g:K4YAAOSwJmVZ3Ly2&amp;enc=AQAEAAACMBPxNw%2BVj6nta7CKEs3N0qWwG%2FRu4GnzgljVwFYrAPzHjWoiQBIVRFaiPx%2BTZTxK4PBmFSLjHJych5RmooPO%2Fk9I2FqbhK%2BiSCw84S6G5mJqoWRKrmMjE24xQXLI5Tq6prSXt%2Fl5%2BXX5BIj4WcnTSRw8zPLA8umy3NNPbVTyoK8Ir4SgF685KWrEZByct3cX%2FNqc5BQAFj8A46XUhzSY5c6E7GenyGTc%2FEQDW5amzX8BGDa7T0srwIlbSRcuyfaQ%2B0SLD7yDUsYuTxD215mWHQ3jGZserqtWLuVuoXoidgYghdc%2F0t1zF8W%2BTfcz9BxPYvkonPcOijxgbVEK9QVdgsAWHkf0Xgbg%2Fy2bfe2AEykNv3gKXGeFt4HUHjWXFmokHvVMEi8x8W0NNos1x%2FEs%2FCWDq5oOKte%2F5eQ0UNX9mSQ%2BFdS5KVwemULfk807XdSPQ8Rt7fWuLyo1r7L8GGKuYDzb7F4UyzwI5Cl5x72C8%2FJuRTurvboTtjX8kZWYSf5WWRZlwXi1EL%2B6K2hE%2FzAKMcMZ8MGjisTFsR%2BWOimlOQeDKp4HFR3sJXEestKuiLVqeXmxoqaa9SWAzyZLvH0r5JUN6rnNSm9UExRp8PyErBnwBfHEVo2G%2F9PfiXtWn2R4GkAm%2FPHmoNI5dhtupubDkXxI9br7BwNkH9pWSquGHJuDAVoASmL0moQcpUugV4esefKd18ts8akZJ%2FF9GeAONB4ddDGNMu%2F210tqZBtccy44&amp;checksum=30319539946988b1b8ad12ae4011b4e5140cdaa5677a" title="Click this link to access SONY PLAYSTATION 1 PS1 CONSOLE / Tested Working &amp; Controller / 3 FREE GAMES">SONY PLAYSTATION 1 PS1 CONSOLE / Tested Working &amp; Controller / 3 FREE GAMES</a>
</h3>
<h3 class="lvtitle"><a class="vip" href="https://www.ebay.co.uk/itm/Playstation-1-With-Games-Including-Crash/303320348335?hash=item469f4d36af:g:6y0AAOSwE91do1~a" title="Click this link to access Playstation 1 With Games Including Crash">Playstation 1 With Games Including Crash</a>
</h3>
<h3 class="lvtitle"><a class="vip" href="https://www.ebay.co.uk/itm/SONY-PLAYSTATION-1-PS1-CONSOLE-Tested-Working-Controller-3-FREE-GAMES/303195399469?hash=item4697daa52d:g:K4YAAOSwJmVZ3Ly2" title="Click this link to access SONY PLAYSTATION 1 PS1 CONSOLE / Tested Working &amp; Controller / 3 FREE GAMES">SONY PLAYSTATION 1 PS1 CONSOLE / Tested Working &amp; Controller / 3 FREE GAMES</a>
</h3>

Код -

title="Click this link to access SONY PLAYSTATION 1 PS1 CONSOLE / Tested Working &amp; Controller / 3 FREE GAMES">SONY PLAYSTATION 1 PS1 CONSOLE / Tested Working &amp; Controller / 3 FREE GAMES</a>
    </h3>

- появляется дважды.

Но, если он появляется два раза, значение href отличается. На eBay этот элемент появляется вверху списка, поэтому мне нужно как-то переписать код, чтобы он сохранил первый экземпляр, но избавился от второго. Я действительно не знаю, с чего начать с решения проблемы, я не знаю, какие эксперименты я могу сделать.

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Я не уверен, что вы можете со временем и, конечно, не надежным способом. Я думаю, что существуют меры по борьбе с соскабливанием. Например, вы можете в течение короткого периода времени добавить заголовки User-Agent и Referrer и при условии, что вы затем запустите код для удаления спонсорских ссылок, вы получите информацию, как показано на странице:

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36',
    'Referer': 'https://www.ebay.co.uk/sch/i.html?_from=R40&_nkw=Playstation+1&_sacat=0&_pgn=1',
}

r= requests.get('https://www.ebay.co.uk/sch/i.html?_from=R40&_nkw=Playstation+1&_sacat=0&_pgn=1', headers=headers)
soup = bs(r.text,'lxml')

for item in soup.select('.lvresult:has(.promoted-lv)'):
    item.decompose()

for title, price in zip(soup.select('.lvtitle') , soup.select('.lvprice .bold')):
    print(title.text, price.text) 

Тем не менее, это быстро обнаруживается и перестает работать без достаточной паузы (я не рассчитал это, но могло быть порядка нескольких минут), прежде чем пытаться запросить снова.

Примечание: меры также обнаруживаютесли вы используете автоматический браузер, например, он удаляет дополнительный рандомизированный атрибут, который вы видите для ссылок SPONSORED (в которых также отсутствует: before).

enter image description here

enter image description here

0 голосов
/ 16 октября 2019

Попробуйте приведенный ниже код. Используйте Zip для использования двух выбранных элементов.

from bs4 import BeautifulSoup
import requests
res=requests.get("https://www.ebay.co.uk/sch/i.html?_from=R40&_nkw=Playstation+1&_sacat=0&_pgn=1")
soup=BeautifulSoup(res.text,'html.parser')
for item,price in zip(soup.select('.lvtitle>a'),soup.select('.lvprice.prc >span')):
    print(item.text + " : " + price.text.strip())

from bs4 import BeautifulSoup
import requests
res=requests.get("https://www.ebay.co.uk/sch/i.html?_from=R40&_nkw=Playstation+1&_sacat=0&_pgn=1")
soup=BeautifulSoup(res.text,'html.parser')
for item,price in zip(soup.select('.lvtitle>a:not(span)'),soup.select('.lvprice.prc >span')):

    print(item.text.replace('New listing','').strip() + " : " + price.text.strip())

Вывод :

SONY PLAYSTATION 1 PS1 CONSOLE / Tested Working & Controller / 3 FREE GAMES : £28.75
Playstation 1 With Games Including Crash : £20.00
Original Sony Playstation 1 Bundle : £29.99
Sony Playstation 1 PS1 Console Bundle Joblot AV TV Lead : £26.99
Sony Playstation 1 PS1 PSONE Console Bundle  & TV AV Lead TESTED WORKING : £29.99
SONY PLAYSTATION 1 PS1 CONSOLE / Tested Working & Controller / 3 FREE GAMES : £28.75
Sony Playstation 1 PS1 Console Bundle Joblot AV TV Lead : £26.99
Slim PAL PlayStation 1 PSOne Console + Official Controller Bundle ~ Fully Tested : £22.95
Sony Playstation 1 PS1 PSONE Console Bundle  & TV AV Lead TESTED WORKING : £29.99
Sony Playstation PS1 Console Boxed, 2 Controllers, 2 Memory Cards, Original Demo : £44.99
Sony Playstation 1 PS1 Console WITH LEADS TESTED and WORKING PAL : £19.95
Sony playstation 1 original console boxed with instructions : £28.00
SONY Playstation 1 PS1 PSONE Games Console Bundle With 14 Games DRIVER - W71 : £20.62
Sony Playstation 1 Grey Console / Model SCPH-1002 / Tested & Working : £7.50
Sony Playstation PS1 Console Boxed, 2 Controllers, 2 Memory Cards, Original Demo : £44.99
Sony Playstation PS One PS1 White Console + 2 Controllers & Memory Card - TESTED : £24.75
PlayStation 1 - Original Grey Console : £29.99
SONY PS1 PlayStation One Console Controller Retro Gaming Classic Boxed VGC : £39.99
SONY PlayStation 1 PS1 Home Games Console Bundle With 9 Games TEKKEN 3 - D37 : £28.00
PLAYSTATION 1 CONSOLE 2 CONTROLLERS 27 GAMES GOOD CONDITION PAL SCPH-55522 : £5.00
PlayStation 1 Console With Leads And Offical Controller Ps1 : £20.00
SONY Playstation 1 with 13 games, 2 controllers, official SONY RFU & RCA cables : £29.99
Sony PlayStation 1 Console Bundle with PS1 Games (Boxed) PAL : £19.99
Sony PlayStation 1 PS1 Grey Console Inc Official Controllers & 10 Game Bundle : £39.95
Playstation One PS1 Boxed in EXCELLENT Condition Bundle with 10 loose Games : £49.99
Sony Playstation 1 Console With Controller And 8 Games : £32.00
Sony PlayStation 1 - PS1 Console - Controller & 2 Memory Cards : £32.99
Sony Playstation 1 SCPH-5502 Grey Console. Orginal playstation with controller : £7.00
Sony Playstation 1 + Leads, Memory Cartridge, Controller & Games : £20.99
Sony Playstation 1 PS1 PS One Original Games Console : £18.00
Sony Playstation 1 One Console, Fully Boxed Complete With Polystyrene And Covers : £34.99
Playstation 1 Console With 11 Games, 2 Controllers, PSU #147 : £26.00
Sony Playstation 1 SCPH-5502 Grey Console + 8 games : £19.30
SONY PLAYSTATION 1 BUNDLE CONSOLE 2 CONTROLLERS MEMORY CARD AND 10 GAMES : £30.00
SONY PLAYSTATION 1 BUNDLE CONSOLE 2 CONTROLLERS MEMORY CARD AND 10 GAMES : £23.00
Sony Playstation PSone Slim 1 2 Controllers With Box : £10.50
20 game PlayStation 1 bundle : £29.95
SONY Playstation 1 PS1 Console Bundle With 9 Games, 2 Controllers, BOXED - C63 : £47.00
128G PS1 MINI True Blue Mini Crackhead Pack For Playstation Built-in 7000 Games : £23.00
Sony Playstation 1 PSone Slim With Crash Bandicoot 3 & DualShock Controller VGC : £20.78
Playstation 1 dual shock boxed with cab no controller. No games great condition : £34.99
Sony PlayStation 1 Dual Shock Bundle Grey Console, 2 controllers, 2 memory cards : £14.40
REGION FREE PLAYSTATION 1 SLIM PSOne 8 WIRE STEALTH CHIPPED / MODDED PS1 CONSOLE : £42.00
Sony Playstation 1 Grey Console+all leads and 2 controller's : £15.00
SONY PLAYSTATION 1 CHIPPED SCPH-5552 - FULLY WORKING PS1 MODDED CONSOLE ONLY : £22.00
Sony PlayStation - Working PS1 Console - Parts Only : £35.00
Sony PlayStation 1 Dual Shock Bundle Grey Console scph 5552 : £18.00
Sony Playstation 1 PS1 PSONE Console & Controller with leads and game : £34.00
Sony PlayStation 1 PS1 Console Bundle - 23 Games -  Controller - All Cables : £2.20
Sony PlayStation 1 PS1 Grey Console Inc Official Controllers & 10 Game Bundle : £35.00
SONY Playstation 1 PS1 PSone Home Games Console Bundle With Controller - B98 : £24.99
Sony PlayStation 1 PS1 Original Console + 3 Games Rayman Crash Banicoot Oddworld : £49.95
SONY PLAYSTATION 1 SCPH-1002 AUDIOPHILE CONSOLE + GAMES : £39.95
Sony Playstation 1 SCPH-102 Console - Grey : £9.99
Sony PS1 PLAYSTATION 1 SCPH-1002 Console : £32.00
Original Sony Playstation 1 PS1 Games Console Leads Controller Bundle Boxed # : £28.99
Playstation 1 Console + 3 Games : £23.50
Sony Playstation 1 Slim Console Bundle- SCPH-102 -Inc Cables & Controller - 6 : £19.99
Playstation 1 Ps1 Psone And 22 Games : £44.95
Sony Playstation 1 Console With Sony Controller, AV Cable and Power Cable PAL : £9.99
Ps1 Console + Memory Card / Choose Slim / Phat / Audiophile - Complete Setup : £24.99
...