我开始学习Python,我已经编写了以下Python代码(其中一些省略了)并且它工作正常,但我想更好地理解它。所以我做了以下几点:
html_doc = requests.get('[url here]')
其次是:
if html_doc.status_code == 200:
soup = BeautifulSoup(html_doc.text, 'html.parser')
line = soup.find('a', class_="some_class")
value = re.search('[regex]', str(line))
print (value.group(0))
我的问题是:
html_doc.text
到底做了什么?我明白它会从html_doc
中产生“文本”(字符串?),但为什么它不是文本呢?它是什么?字节?也许是一个愚蠢的问题,但为什么requests.get
没有创建一个包含HTML代码的真长字符串?re.search
结果的唯一方法是value.group(0)
,但我完全不知道这是做什么的。为什么我不能直接看value
?我传给它一个字符串,只有一个匹配,为什么生成的value
不是字符串?答案 0 :(得分:4)
class WCFCalculadoraServiceProxy : ClientBase<ICalculadoraService>, ICalculadoraService
{
public int Add(int num1, int num2)
{
//Lo que hace es llamar al método del servicio.
return base.Channel.Add(num1, num2);
}
public Task<int> AddAsync(int num1, int num2)
{
//Lo que hace es llamar al método del servicio.
return base.Channel.AddAsync(num1, num2);
}
}
返回值,如文档中所述,是Response对象。
class Program
{
static void Main(string[] args)
{
WCFCalculadoraServiceProxy miProxy = new WCFCalculadoraServiceProxy();
try
{
addAsync(miProxy);
}
catch
{
//TODO
}
finally
{
miProxy.Close();
}
}
private static async void addAsync(WCFCalculadoraServiceProxy paramProxy)
{
int resultado = await paramProxy.AddAsync(1, 2); //is reached
Console.WriteLine("Service is host at " + DateTime.Now.ToString()); // is not reached
Console.WriteLine("El resultado de sumar 1 y 2 es: " + resultado);
Console.WriteLine("Host is running... Press <Enter> key to stop");
Console.ReadKey();
Console.ReadLine();
}
}
返回值为MatchObject object。
引入了两个对象,因为它们包含的信息比简单的响应字节(例如HTTP状态代码,响应头等)或简单找到的字符串值(例如它包括第一个和最后一个匹配字符的位置)要多得多。
有关更多信息,您必须学习文档。
仅供参考,要检查返回值的类型,您可以使用内置requests.get()
函数:
re.search()
答案 1 :(得分:1)
在我看来,你缺乏关于类,对象和方法的一些基本知识......等等,你需要阅读更多关于它的信息here(对于Python 2.7)和请求模块here。
关于您提出的问题,当您键入html_doc = requests.get('url')
时,您正在创建类requests.models.Response
的实例,您可以通过以下方式进行检查:
>>> type(html_doc)
<class 'requests.models.Response'>
现在,html_doc
有方法,因此html_doc.text
会向您返回服务器的回复
同样适用于re
模块,其每个方法都生成不仅仅是int
或string