Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/165: Рейтинг темы: голосов - 165, средняя оценка - 4.54
 Аватар для WhiteMan
14 / 14 / 2
Регистрация: 28.05.2012
Сообщений: 104
Записей в блоге: 2

Как спарсить номер телефона из Avito?

29.04.2013, 12:34. Показов 34387. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как спарсить номер телефона из авито? Вот, что я смог понять:
1. сначала открывается страница обьявления (Например http://m.avito.ru/item/160974735), получаются cookies
2. Когда нажимаешь на кнопку "Показать номер" отправляется get запрос (например: http://m.avito.ru/item/1609747... 3c659673bb) скорее всего с cookies. Возвращается страница, где уже вместо кнопки "Показать номер" написан сам номер
Ссылку для get запроса спарсить без проблем, но почему-то получить страницу с номером мне не удается.
Вот мой код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
import requests
import re
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13'}
r = requests.get('http://m.avito.ru/item/160974735', headers=headers)
text = r.text
 
LinkWithTrash = re.search(r'showPhone\(event\)\"\shref=\".+\"', text).group() #Ссылка с лишними тегами
NotFullLink = LinkWithTrash[24:-61] #Часть ссылки
FullLink = 'http://m.avito.ru' + NotFullLink #Полная ссылка
print FullLink
p = requests.get(FullLink, cookies=r.cookies, headers=headers) #Новый запрос спрошлыми кукисами 
print p.text # Почему-то в номом исходном коде нет телефона
Буду благодарен за помощь
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.04.2013, 12:34
Ответы с готовыми решениями:

Номер телефона на avito
пишу парсер Авито. Подскажите пожалуйста как "достать" картинку с номером телефона в объявлении. Он скрыт за кнопкой "показать...

Структуры (cведения об абонентах АТС: ФИО владельца телефона, год установки телефона, номер телефона, тип установки телефона, льгота)
Сведения об абонентах АТС. Структура должна содержать следующую информацию: фамилию, имя, отчество владельца телефона, год установки ...

На междугородной АТС информация содержит дату разговора, код и название города, время разговора, тариф, номер телефона в этом городе и номер телефона
Помогите пожалуйста доделать задачу. При такой постановке вопроса помощи не дождешься.unit Unit3; interface uses Windows,...

19
6 / 6 / 1
Регистрация: 03.04.2010
Сообщений: 37
07.05.2013, 21:04
Есть вот такая классная штука.

Получение страницы:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from twisted.internet import reactor
from twisted.web.client import getPage
 
def callback(page):
    # do smth with page - it will be a string
    if reactor.running:
        reactor.stop()
 
def main():
    url = 'http://m.avito.ru/item/160974735'
    getPage(url).addCallback(callback)
    reactor.run()
 
if __name__ == '__main__':
    main()
Для получения урла телефона лучше использовать lxml, а точнее, XPath

Python
1
2
3
4
5
from lxml import html
 
def callback(page):
    doc = html.document_fromstring(page)
    href = doc.xpath("//a[@id='showPhoneBtn']/@href")[0]
После того, как ссылка найдена, нужно еще раз вызвать getPage для url+href, добавив колбек типа
Python
1
2
3
4
5
6
7
def get_phone(page):
    # с помощью xpath вытаскиваем телефон
    doc = html.document_fromstring(page)
    phone = doc.xpath("//li[@class='para m_item_phone']/a/text()")[0]
 
    if reactor.running:
        reactor.stop()
2
 Аватар для WhiteMan
14 / 14 / 2
Регистрация: 28.05.2012
Сообщений: 104
Записей в блоге: 2
07.05.2013, 21:08  [ТС]
А у вас получилось так достать телефон?
0
6 / 6 / 1
Регистрация: 03.04.2010
Сообщений: 37
07.05.2013, 21:09
Цитата Сообщение от WhiteMan Посмотреть сообщение
А у вас получилось так достать телефон?
Да, конечно. Иначе я бы код не приводил.
0
 Аватар для WhiteMan
14 / 14 / 2
Регистрация: 28.05.2012
Сообщений: 104
Записей в блоге: 2
07.05.2013, 21:30  [ТС]
Спасибо огромное, смог все сделать с ваших слов, только не понимаю что происходит. где бы почитать про парсинг с twisted? Что посоветуете? На сайте не смог ничего хорошего найти
0
6 / 6 / 1
Регистрация: 03.04.2010
Сообщений: 37
07.05.2013, 21:43
Цитата Сообщение от WhiteMan Посмотреть сообщение
Спасибо огромное, смог все сделать с ваших слов, только не понимаю что происходит. где бы почитать про парсинг с twisted? Что посоветуете? На сайте не смог ничего хорошего найти
Twisted здесь используется для получения страницы и только.
Парсинг осуществляется с помощью lxml.

На хабре довольно много статей как о twisted, так и о lxml (одну из них я выше дал), начните с них.
Либо, если с английским хорошо, то вот howto по twisted.
1
 Аватар для WhiteMan
14 / 14 / 2
Регистрация: 28.05.2012
Сообщений: 104
Записей в блоге: 2
07.05.2013, 21:54  [ТС]
Спасибо
0
224 / 209 / 63
Регистрация: 26.05.2011
Сообщений: 363
08.05.2013, 04:32
Цитата Сообщение от malinoff Посмотреть сообщение
Есть вот такая классная штука
Ну зачем из пушки по воробьям
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import requests
from urllib.parse import urljoin
 
from lxml.html import fromstring
 
def getPhone(url):
    headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13'}
 
    session = requests.session()
    resp = session.get(url, headers=headers)
 
    html = fromstring(resp.content)
    href = html.xpath("//a[@id='showPhoneBtn']/@href")[0]
 
    url = urljoin(resp.url, href)
    resp = session.get(url)
 
    html = fromstring(resp.content)
    phone = html.xpath("//li[@class='para m_item_phone']/a/text()")[0]
 
    return phone
1
6 / 6 / 1
Регистрация: 03.04.2010
Сообщений: 37
08.05.2013, 04:58
Цитата Сообщение от pyuser Посмотреть сообщение
Ну зачем из пушки по воробьям
Очень удобная пушка
Согласен, для этой задачи немного оверхед, но в дальнейшем знание twisted только на пользу будет.
0
 Аватар для WhiteMan
14 / 14 / 2
Регистрация: 28.05.2012
Сообщений: 104
Записей в блоге: 2
08.05.2013, 08:09  [ТС]
Так совсем понятно Спасибо. Но у меня почему-то нет такой функции в urllib. Ну и ладно.
0
224 / 209 / 63
Регистрация: 26.05.2011
Сообщений: 363
10.05.2013, 03:19
Цитата Сообщение от WhiteMan Посмотреть сообщение
Но у меня почему-то нет такой функции в urllib. Ну и ладно.
Очевидно у Вас вторая ветка питона. Поищите urljoin в справке.
0
26 / 26 / 6
Регистрация: 19.10.2012
Сообщений: 131
11.05.2013, 15:24
Цитата Сообщение от malinoff Посмотреть сообщение

Для получения урла телефона лучше использовать lxml, а точнее, XPath
lxml насколько быстрее обработает html, нежели regexp? Если по страницам (а их много), например, только ссылки искать, хорошая фора будет перед регуляркой?
0
6 / 6 / 1
Регистрация: 03.04.2010
Сообщений: 37
11.05.2013, 16:04
Цитата Сообщение от man0ngi Посмотреть сообщение
lxml насколько быстрее обработает html, нежели regexp? Если по страницам (а их много), например, только ссылки искать, хорошая фора будет перед регуляркой?
Как-то вот так.
0
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 47
03.09.2013, 11:33
Ребят может вы мне поможете, проблема такая. Пишу парсер сайта погоды с помощью этой темы и столкнулся с следующей бедой :
Сам код :
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import lxml.html
from urllib import request
import requests
from urllib.parse import urljoin
from lxml.html import fromstring
url = "http://rp5.ru/%D0%9F%D0%BE%D0%B3%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%9A%D1%80%D0%B0%D1%81%D0%BD%D0%BE%D0%B4%D0%B0%D1%80%D0%B5,_%D0%9A%D1%80%D0%B0%D1%81%D0%BD%D0%BE%D0%B4%D0%B0%D1%80%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D1%80%D0%B0%D0%B9"
 
http_proxy = "http://Zud_AD:2231s@10.5.45.250:3128"
 
proxyDict = { 
             
              "http" : http_proxy
              
            }
 
r = requests.get(url,  proxies=proxyDict)
 
html = fromstring(r.content)
temp= html.xpath("//div[@class='t_0']/a/text()")[0]
А вот и ошибка, не могу понять, что не так делаю

Python
1
2
3
4
5
6
Traceback (most recent call last):
  File "C:/Python32/xd", line 18, in <module>
    html = fromstring(r.content)
  File "C:\Python32\lib\site-packages\lxml\html\__init__.py", line 630, in fromstring
    if start.startswith('<html') or start.startswith('<!doctype'):
TypeError: expected an object with the buffer interface
0
0 / 0 / 0
Регистрация: 26.11.2017
Сообщений: 289
16.12.2018, 19:54
malinoff, При установке twisted выдаёт ошибку
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
16.12.2018, 20:19
Цитата Сообщение от MiracleOne Посмотреть сообщение
При установке twisted выдаёт ошибку
Во первых malinoff 4 года на форуме не появлялся, во вторых выкладывайте текст ошибки
0
0 / 0 / 0
Регистрация: 26.11.2017
Сообщений: 289
16.12.2018, 21:54
ТабуретY,
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
17.12.2018, 06:35
MiracleOne, дело в том, что под python 3.7 еще нет скомпилированных пакетов и python пытается скачать исходники и скомпилировать их, а компилятора с++ нет, самый простой выход это установить python 3.6
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
17.12.2018, 13:31
На pypi вообще нет ничего кроме исходников, а вот lfd.uci.edu есть компилированные пакеты twisted под все актуальные версии Python.
Но так как люди все равно не читают справочные разделы разделы Python , то, как правило, так и остаются ни с чем.
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
16.01.2019, 14:11
WhiteMan, https://youtu.be/ucTPsHW1914?l... cClzg85_TZ
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.01.2019, 14:11
Помогаю со студенческими работами здесь

Даны фамилия сотрудника, его инициалы и номер телефона. Найти номер телефона по его фамилии и инициалам.
1)Даны фамилия сотрудника, его инициалы и номер телефона. Найти номер телефона по его фамилии и инициалам. 2)Написать программу перевода...

Как можно зделать лимит при вводе номера телефона, к примеру: я ввожу номер 380505922454 и если этот номер больше чем 12
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include&lt;string.h&gt; #include &lt;string&gt; using namespace std; class Phone_number { ...

Заблокирован очередной номер мобильного в объявлениях на Avito и Юле
Суть проблемы. Есть постоянно обновляемое объявление об оказании компьютерных услуг на Авито и Юле. Содержание индентичное. 3 года без...

Записи и типизированые файлы. Структура: ФИО, год установки телефона, номер телефона
помогите пожалуйста решить задачу Создать файл, содержащий сведения о телефонах абонентов. Каждая запись имеет поля: фамилия абонента,...

Записи и типизированные файлы. Структура: ФИО абонента, год установки телефона, номер телефона
Создать файл, содержащий сведения о телефонах абонентов. Каждая запись имеет поля: фамилия абонента, его имя и отчество, год установки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru