Py学习  »  Python

点击后显示不使用python的手机

Muhammad Akram • 4 年前 • 546 次点击  

我想刮电话号码,但电话号码只显示点击后,请您是否可以刮电话号码直接使用python?我的密码只能和斯塔尔一起用。这是我想从哪里刮电话号码的链接: https://hipages.com.au/connect/abcelectricservicespl/service/126298 请引导我! 这是我的代码:

import requests
from bs4 import BeautifulSoup


def get_page(url):
    response = requests.get(url)

    if not response.ok:
        print('server responded:', response.status_code)
    else:
        soup = BeautifulSoup(response.text, 'lxml')
    return soup

def get_detail_data(soup):

    try:
        title = (soup.find('h1', class_="sc-AykKI",id=False).text)
    except:
        title = 'Empty Title'
    print(title)

    try:
        contact_person = (soup.findAll('span', class_="Contact__Item-sc-1giw2l4-2 kBpGee",id=False)[0].text)
    except:
        contact_person = 'Empty Person'
    print(contact_person)

    try:
        location = (soup.findAll('span', class_="Contact__Item-sc-1giw2l4-2 kBpGee",id=False)[1].text)
    except:
        location = 'Empty location'
    print(location)

    try:
        cell = (soup.findAll('span', class_="Contact__Item-sc-1giw2l4-2 kBpGee",id=False)[2].text)
    except:
        cell = 'Empty Cell No'
    print(cell)

    try:
        phone = (soup.findAll('span', class_="Contact__Item-sc-1giw2l4-2 kBpGee",id=False)[3].text)
    except:
        phone = 'Empty Phone No'
    print(phone)

    try:
        Verify_ABN = (soup.find('p', class_="sc-AykKI").text)
    except:
        Verify_ABN = 'Empty Verify_ABN'
    print(Verify_ABN)

    try:
        ABN = (soup.find('div', class_="box__Box-sc-1u3aqjl-0").find('a'))
    except:
        ABN = 'Empty ABN'
    print(ABN)



def main():
    #get data of detail page
    url = "https://hipages.com.au/connect/abcelectricservicespl/service/126298"
    #get_page(url)
    get_detail_data(get_page(url))



if __name__ == '__main__':
    main()
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/56955
 
546 次点击  
文章 [ 2 ]  |  最新文章 4 年前
Ahmed Buksh
Reply   •   1 楼
Ahmed Buksh    4 年前

页面源中已存在电话号码。 页面源中有一个脚本以 window.__INITIAL_STATE__ ,它包含一个对象,该对象具有针对多个提供程序的数据,因此您可以从这里获取所有提供程序的电话号码,或者只需在json中加载此对象,然后基于存储作为密钥,根据该存储获取电话号码

αԋɱҽԃ αмєяιcαη
Reply   •   2 楼
αԋɱҽԃ αмєяιcαη    4 年前
import requests
from bs4 import BeautifulSoup
import re


def Main():
    r = requests.get(
        "https://hipages.com.au/connect/abcelectricservicespl/service/126298")
    soup = BeautifulSoup(r.text, 'html.parser')
    name = soup.find("h1", {'class': 'sc-AykKI'}).text
    print(name)
    person = soup.find(
        "span", {'class': 'Contact__Item-sc-1giw2l4-2 kBpGee'}).text.strip()
    print(person)
    addr = soup.findAll(
        "span", {'class': 'Contact__Item-sc-1giw2l4-2 kBpGee'})[1].text
    print(addr)
    print(re.search('phone\\\\":\\\\"(.*?)\\\\"', r.text).group(1))
    print(re.search('mobile\\\\":\\\\"(.*?)\\\\"', r.text).group(1))
    print(re.search('abn\\\\":\\\\"(.*?)\\\\"', r.text).group(1))
    print(re.search('website\\\\":\\\\"(.*?)\\\\"', r.text).group(1))


Main()

输出:

ABC Electric Services p/l
Mal
222 Henry Lawson DRV, Georges Hall NSW 2198
1800 801 828
0408 600 950
37137808989
www.abcelectricservices.com.au

import requests
from bs4 import BeautifulSoup
import pyjsparser
import json
import re


def Main():
    r = requests.get(
        "https://hipages.com.au/connect/abcelectricservicespl/service/126298")
    soup = BeautifulSoup(r.text, 'html.parser')
    phone = soup.findAll("script")[5]
    tree = pyjsparser.parse(phone.text)
    print(json.loads(tree["body"][0]["expression"]["right"]["value"]))


Main()

另一个版本:

import requests
from bs4 import BeautifulSoup
import re
import json


def Main():
    r = requests.get(
        "https://hipages.com.au/connect/abcelectricservicespl/service/126298")
    soup = BeautifulSoup(r.text, 'html.parser')
    data = soup.findAll("script")[5].text
    source = re.search(r'__INITIAL_STATE__\s*=\s*"({.*})', data).group(1)
    kuku = json.loads(re.sub('(?<!\\\)\\\\"', '"', source))
    print(json.dumps(kuku, indent=4))


Main()