Поиск в интернете не переходит к следующему элементу - PullRequest
0 голосов
/ 09 февраля 2020
from bs4 import BeautifulSoup
import requests


def kijiji():
    source = requests.get('https://www.kijiji.ca/b-mens-shoes/markham-york-region/c15117001l1700274').text
    soup = BeautifulSoup(source,'lxml')
    b = soup.find('div', class_='price')
    for link in soup.find_all('a',class_ = 'title'):
        a = link.get('href')
        fulllink = 'http://kijiji.ca'+a
        print(fulllink)
        b = soup.find('div', class_='price')
        print(b.prettify())
kijiji()

Использование этого метода - суммирование всех видов предметов, продаваемых в кидзидзи, и сопоставление их с ценой. Но я никак не могу найти приращения того, что красивый суп находит с классом цены, и я застрял с первой ценой. Find_all также не работает, поскольку он просто распечатывает весь BLOB-объект, а не группирует его вместе с каждым элементом.

Ответы [ 3 ]

1 голос
/ 10 февраля 2020

Если у вас Красивый суп 4.7.1 или выше, вы можете использовать следующий css селектор select(), что намного быстрее.

код:

import requests
from bs4 import BeautifulSoup

res=requests.get("https://www.kijiji.ca/b-mens-shoes/markham-york-region/c15117001l1700274").text
soup=BeautifulSoup(res,'html.parser')
for item in soup.select('.info-container'):
    fulllink = 'http://kijiji.ca' + item.find_next('a', class_='title')['href']
    print(fulllink)
    price=item.select_one('.price').text.strip()
    print(price)

Или использовать find_all() использовать ниже кодовый блок

import requests
from bs4 import BeautifulSoup

res=requests.get("https://www.kijiji.ca/b-mens-shoes/markham-york-region/c15117001l1700274").text
soup=BeautifulSoup(res,'html.parser')
for item in soup.find_all('div',class_='info-container'):
    fulllink = 'http://kijiji.ca' + item.find_next('a', class_='title')['href']
    print(fulllink)
    price=item.find_next(class_='price').text.strip()
    print(price)
1 голос
/ 10 февраля 2020

Поздравляем с поиском ответа. Я дам вам другое решение только для справки.

import requests
from simplified_scrapy.simplified_doc import SimplifiedDoc
def kijiji():
  url = 'https://www.kijiji.ca/b-mens-shoes/markham-york-region/c15117001l1700274'
  source = requests.get(url).text
  doc = SimplifiedDoc(source)
  infos = doc.getElements('div',attr='class',value='info-container')
  for info in infos:
    price = info.select('div.price>text()')
    a = info.select('a.title')
    link = doc.absoluteUrl(url,a.href)
    title = a.text
    print (price)
    print (link)
    print (title)
kijiji()

Результат:

$310.00
https://www.kijiji.ca/v-mens-shoes/markham-york-region/jordan-4-oreo-2015/1485391828
Jordan 4 Oreo (2015)
$560.00
https://www.kijiji.ca/v-mens-shoes/markham-york-region/yeezy-boost-350-yecheil-reflectives/1486296645
Yeezy Boost 350 Yecheil Reflectives
...

Вот еще примеры: https://github.com/yiyedata/simplified-scrapy-demo/tree/master/doc_examples

0 голосов
/ 09 февраля 2020
from bs4 import BeautifulSoup
import requests


def kijiji():
    source = requests.get('https://www.kijiji.ca/b-mens-shoes/markham-york-region/c15117001l1700274').text
    soup = BeautifulSoup(source,'lxml')
    b = soup.find('div', class_='price')
    for link in soup.find_all('a',class_ = 'title'):
        a = link.get('href')
        fulllink = 'http://kijiji.ca'+a
        print(fulllink)
        print(b.prettify())
        b = b.find_next('div', class_='price')
kijiji()

Застрял на этом в течение часа, как только я разместил это в стеке, я сразу пришел с идеей, грязный код, но работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...