Здравствуйте, в настоящее время я работаю над программой, которая отправит номер телефона на веб-сайт обратного телефонного номера, а затем будет следовать правильному Xpath, чтобы определить, является ли телефон беспроводным или нет.
Xpath элемента
//*[@id="content"]/fieldset/div/table/tbody/tr[3]/td[2]/strong
Мой код до сих пор
def Phone_Checker(number):
url = 'http://www.reversephonelookup.com/'
data={'Enter Number': number}
r = requests.post(url, data=data)
tree=html.fromstring(r.content)
Service_type=tree.xpath('//fieldset[@id="content"]/text()')
print(Service_type)
if "wireless" in Service_type:
print(True)
return True
else:
print(False)
return False
Мне просто интересно, неправильно ли я ввожу свой xpath, и если мой код должен правильно отправлять номер телефона, я посредственный программист и хотел бы знать, как я смогу заставить этот код работать так, как я хотел бы.
1 ответ
В вашем подходе отсутствует довольно много необходимых данных и шагов, когда я впервые посмотрел, я увидел, что на странице используется много javascript, но, отслеживая запросы, которые я видел, вы действительно можете получить их с помощью запросов, сначала нам нужно опубликовать:
http://www.reversephonelookup.com/results.php
с правильными данными публикации:
Как только мы это сделаем, нам нужно сделать запрос на получение http://www.reversephonelookup.com/number/the_number
:
Итак, все это вместе:
def Phone_Checker(number):
head = {
"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
url = 'http://www.reversephonelookup.com/results.php'
data = {"phone": number, "image.x": "26", "image.y": "37"}
with requests.Session() as s:
s.post(url, data=data, headers=head)
r = s.get("http://www.reversephonelookup.com/number/{}/".format(number),headers=head)
tree = html.fromstring(r.content)
Service_type = tree.xpath('//*[@id="content"]//fieldset//text()')
return "wireless" in Service_type
Phone_Checker("2068675309")
return Service_type and "wireless" in Service_type
вернет True, только если беспроводная связь является строкой в списке. Я также настроил ваш xpath, чтобы получить весь текст.
Более полезным способом использования функции было бы возвращение дерева lxml:
def Phone_Checker(number):
head = {
"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
url = 'http://www.reversephonelookup.com/results.php'
data = {"phone": number, "image.x": "26", "image.y": "37"}
with requests.Session() as s:
s.post(url, data=data, headers=head)
r = s.get("http://www.reversephonelookup.com/number/{}/".format(number),headers=head)
return html.fromstring(r.content)
Затем:
xml = Phone_Checker(....)
Пример:
In [5]: xml = Phone_Checker("8598795756")
In [6]: print(xml.xpath("//fieldset//tr/td[text()='Original Service Type:']/following::strong/text()"))
['Landline', 'Independent Telephone Company', 'Versailles, KY', 'VRSLKYXADS0']
Первый результат - это тип подключения, который, если вы просто хотите, вы можете использовать:
"//fieldset//tr/td[text()='Original Service Type:']/following::strong[1]/text()"
Похожие вопросы
Новые вопросы
xml
XML (Extensible Markup Language) - это формат структурированного документа, определяющий правила кодирования текста. При использовании этого тега включайте дополнительные теги, такие как язык программирования, наборы инструментов, используемые технологии XML и другие теги, описывающие среду, в которой опубликована проблема. Гибкость XML обеспечивает широкий спектр применений для передачи человеческих и машинных данных, в том числе конкретных инструментов и библиотек.