如何使用python在点击后显示手机时不刮手机

2024-04-28 03:35:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我想刮手机号,但手机号只会在点击后显示,所以请您是否可以直接使用python刮手机号?我的代码刮手机号,但使用starr***。这是我想刮手机的链接,号码: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()

Tags: textidfalseurlgetserviceclassempty
2条回答
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()

页面源中已存在电话号码。 PageSource中有一个脚本,以window.__INITIAL_STATE__开头,它包含一个对象,该对象具有针对多个提供商的数据,因此您可以从这里获取所有提供商的电话号码,或者简单地将此对象加载到json中,并根据store作为键,获取针对该存储的电话号码

相关问题 更多 >