我已经尝试使用 requests
和 urllib
几个小时了。我很迷失,也被谷歌误解了。一些技巧,甚至任何东西都会有用。谢谢。
目标:发布国家代码和电话号码,然后获取移动运营商等。 问题:不打印任何内容。变量“name”打印出 None。
def do_ccc(self): #Part of bigger class
"""Phone Number Scan"""
#prefix=input("Phone Number Prefix:")
#number=input("Phone Number: ")
url=("https://freecarrierlookup.com/index.php")
from bs4 import BeautifulSoup
import urllib
data = {'cc' : "COUNTRY CODE",
'phonenum' : "PHONE NUMBER"}#.encode('ascii')
data=json.dump(data,sys.stdout)
page=urllib.request.urlopen(url, data)
soup=BeautifulSoup(page, 'html.parser')
name=soup.find('div', attrs={'class': 'col-sm-6 col-md-8'})
#^^^# Test(should print phone number)
print(name)
最佳答案
正如 Zags 指出的那样,使用网站并违反其服务条款并不是一个好主意,特别是当该网站提供廉价 API 时.
但是回答你原来的问题:
- 您使用
json.loads
而不是json.load
导致空的data
对象。 - 如果您查看该页面,您会发现 POST 请求的 URL 不同,是
get Carrier.php
而不是index.php
。 - 您还需要将
str
从json.dumps
转换为bytes
,即使这样,网站也会拒绝您的调用,因为隐藏 token 会添加到网站提交的每个请求中,以防止自动抓取。
关于python - 如何实现这个python post并获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51732475/