Парсер загружает только первую ссылку со страницы - Python

Узнай цену своей работы

Формулировка задачи:

Доброго всем дня, столкнулася з такой проблемой что написаный мной парсер вытягивает только 1 ссылку хотя должен тащить все. Может кто то знает как подправить. Зарание спасибо
Листинг программы
  1. import requests
  2. from lxml import html
  3. import urllib.parse
  4. import urllib.request
  5. class VashMagaz(object):
  6. RESULT = []
  7. def parse_vashmagaz_run(self):
  8. url = 'https://vashmagazin.ua/nerukhomist/kvartyry/'
  9. r = requests.get(url)
  10. res = html.fromstring(r.content)
  11. result = res.xpath(u'//*[contains(text(), "120")]/@href')
  12. num = self._get_page_num(result[0])
  13. result = self.get_page_data(num)
  14. return result
  15. def get_page_data(self, num):
  16. url = 'https://vashmagazin.ua/nerukhomist/kvartyry/?item_price1=&item_price2=&page={}'
  17. for i in range(1, num):
  18. r = requests.get(url.format(i))
  19. self.get_all(r.content)
  20. return self.RESULT
  21. def _get_page_num(self,href):
  22. result = urllib.parse.urlparse(href)
  23. result = urllib.parse.parse_qs(result.query)
  24. return int(result['page'][0])
  25. def get_all(self, data):
  26. data = self._get_desc(data)
  27. for key, i in enumerate(data):
  28. text = i.xpath('.//h3[@class="ner_h3"]/a/text()')
  29. href = i.xpath('.//h3[@class="ner_h3"]/a/@href')[key]
  30. self.RESULT.append({'text': text,
  31. 'href': 'https://vashmagazin.ua/' + href,
  32. })
  33.  
  34. def _get_desc(self, data):
  35. return self.get_from_xpath(data, '//*[@id="price"]')
  36. def get_from_xpath(self, data, xpath):
  37. res = html.fromstring(data)
  38. return res.xpath(xpath)
  39. if __name__ == '__main__':
  40. magaz = VashMagaz()
  41. magaz.parse_vashmagaz_run()
  42. msg = u'Subject: Квартири'+"\n"
  43. for res in magaz.RESULT:
  44. f = open('data.txt','w')
  45. for k,i in res.items():
  46. f.write(str(res[k]))
  47. for res in magaz.RESULT:
  48. for k, i in res.items():
  49. msg+=str(res[k]).strip()+"\n"
  50. msg+='\n'
  51. print(msg)

Решение задачи: «Парсер загружает только первую ссылку со страницы»

textual
Листинг программы
  1. import requests
  2. from bs4 import BeautifulSoup
  3.  
  4. doc = requests.get('https://vashmagazin.ua/nerukhomist/kvartyry/')
  5. elems = BeautifulSoup(doc.content, "html.parser").find_all('h3', {"class": "ner_h3"})
  6. for elem in elems:
  7.     print(elem.a.text)
  8.     print(elem.a['href'])

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут