【问题标题】:How can I scrape a phone number inside the span tag using python bs4 or any other lib如何使用 python bs4 或任何其他库在 span 标签内刮取电话号码
【发布时间】:2021-08-02 20:39:00
【问题描述】:

我用的是bs4方法

这里是网站haraj上的一个项目的链接

soup.select_one('.postWrapper .postMain .details .post_body .post_extra_info .contact a')

soup.find('span', {'class', 'contact'})

但它不会得到它 任何帮助表示赞赏 谢谢

【问题讨论】:

  • 请不要将HTML标记粘贴为图像,将其发布为CODE,请检查How to Ask

标签: python-3.x web-scraping beautifulsoup


【解决方案1】:

您必须直接与API 通信,因为页面是通过JavaScript 呈现的,它调用后端API 以获取内容。

import requests


# https://haraj.com.sa/1179070147

def main(url):
    params = {
        'queryName': 'postLikeInfo,postContact',
        'token': '',
        'clientid': '812f41b2-9936-4405-aa9c-378db19b8cc4',
        'version': '8.2.9 , 10 18 - 7 - 21'
    }
    data = {
        "query": "query postLikeInfo_postContact($id: Int!, $token: String,$postId: Int!) {\n\t\t\n\t\tpostLikeInfo(id: $id, token: $token)\n\t\t{ \n                    isLike\n                    total\n                    isFollowing\n                     }\n\t\n\r\n\t\tpostContact(postId: $postId)\n\t\t{ \n                    contactText\n                    contactMobile\n                     }\n\t\n\t}",
        "variables": {
            "id": 79070147,
            "postId": 79070147,
            "token": ""
        }
    }
    r = requests.post(url, params=params, json=data)
    print(r.json()['data']['postContact']['contactMobile'])


main('https://graphql.haraj.com.sa/')

输出:

+966536010587

另外,为了解析完整的广告,请遵循以下调用:

import requests


# https://haraj.com.sa/1179070147

def main(url):
    params = {
        'queryName': 'detailsPosts_singlePost',
        'token': '',
        'clientid': '812f41b2-9936-4405-aa9c-378db19b8cc4',
        'version': '8.2.9 , 10 18 - 7 - 21'
    }
    data = {
        "query": "query($ids:[Int]) { posts( id:$ids) {\n\t\titems {\n\t\t\tid status authorUsername title city postDate updateDate hasImage thumbURL authorId bodyHTML bodyTEXT city tags imagesList commentStatus commentCount upRank downRank geoHash\n\t\t}\n\t\tpageInfo {\n\t\t\thasNextPage\n\t\t}\n\t\t} }",
        "variables": {
            "ids": [
                79070147
            ]
        }
    }
    r = requests.post(url, params=params, json=data)
    print(r.json())


main('https://graphql.haraj.com.sa/')

输出:


{
   "data":{
      "posts":{
         "items":[
            {
               "id":79070147,
               "status":true,
               "authorUsername":"mostafa awd",
               "title":"فيلا للبيع في حي شبرا في الرياض",
               "city":"الرياض",
               "postDate":1627937386,
               "updateDate":1627937386,
               "hasImage":true,
               "thumbURL":"536010587_1627936555504.jpg",
               "authorId":12799016,
               "bodyHTML":" السعر : 700,000 ريال\n            <p>فيلا للبيع في حي شبرا ، الرياض ، الرياض</p>\n<p>الواجهة شرق</p><p>3 غرف نوم</p><p>صالتان</p><p>5 دورات مياة</p><p>عرض الشارع 20 متر</p><p>درج صالة</p><p>غرفة خادمة</p><p>بيت شعر</p><p>حوش</p><p>مطبخ</p><p>ملحق</p><p>مدخل سيارة</p><p>دوبلكس</p><p>المساحة 250 متر مربع</p>\n<p><img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936555504.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936555547.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936555596.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936555661.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936555716.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936555770.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936555832.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936555889.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936555951.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556015.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556070.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556128.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556191.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556256.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556336.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556411.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556483.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556555.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556632.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556709.jpg\"  loading=\"lazy\" >\n<img src=\"https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556791.jpg\"  loading=\"lazy\" ></p>",
               "bodyTEXT":"السعر : 700,000 ريال\n             \nفيلا للبيع في حي شبرا ، الرياض ، الرياض\n \nالواجهة شرق \n3 غرف نوم \nصالتان \n5 دورات مياة \nعرض الشارع 20 متر \nدرج صالة \nغرفة خادمة \nبيت شعر \nحوش \nمطبخ \nملحق \nمدخل سيارة \nدوبلكس \nالمساحة 250 متر مربع",
               "tags":[
                  "حراج العقار",
                  "عقار حي شبرا في الرياض",
                  "فلل للبيع",
                  "فلل للبيع في الرياض",
                  "فلل للبيع في حي شبرا في الرياض"
               ],
               "imagesList":[
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936555504.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936555547.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936555596.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936555661.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936555716.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936555770.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936555832.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936555889.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936555951.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556015.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556070.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556128.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556191.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556256.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556336.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556411.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556483.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556555.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556632.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556709.jpg",
                  "https://s3-eu-west-1.amazonaws.com/aqar/props/536010587_1627936556791.jpg"
               ],
               "commentStatus":1,
               "commentCount":0,
               "upRank":0,
               "downRank":0,
               "geoHash":"th35vce06"
            }
         ],
         "pageInfo":{
            "hasNextPage":false
         }
      }
   }
}

【讨论】:

  • 它返回一个空列表
  • @OmarMahmnoud 那么您正在处理JS 网站,您可以分享网址吗?
  • 当然the url
  • @OmarMahmnoud edit 您的问题并包含网址,我也无法在主页中看到包含tel: 的任何标签,看来您指的是内页!
  • 很抱歉,这是我第一次在这里提出问题,我将网址添加到帖子中,现在我在这个框中看到了一些添加的文字其他人有电话号码这里是图片中的那个@ 987654323@其他页面有this代码。
【解决方案2】:

例如,您可以使用 select 和 CSS 选择器,如 .class、#id 和 tag。

from bs4 import BeautifulSoup

content='''<div class="test1">
   <a href="www.google.com" blur blur~> text </a>
</div>

<div class="test2">
   <a href="www.stackoverflow.com" blur blur~> text </a>
</div>

<div class="test3">
   <a href="www.msn.com" blur blur~> text </a>
</div>

<div class="test4">
   <a href="www.naver.com" blur blur~> text </a>
</div>

<div class="test5">
   <a href="www.ios.com" blur blur~> text </a>
</div>'''

soup = BeautifulSoup(content, 'html.parser')

all_a = soup.select('.test5 a')

for a in all_a:
    print(a['href'])

http://www.crummy.com/software/BeautifulSoup/bs4/doc/

【讨论】:

  • 请你看看网站的图像标签现在有类,它在 div 和 spans 的深处
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-18
  • 2022-01-11
  • 1970-01-01
  • 2021-01-07
  • 1970-01-01
相关资源
最近更新 更多