定义选择器以定位两种类型的tr时遇到问题

时间:2019-06-22 06:48:31

标签: python python-3.x web-scraping css-selectors

我写了两个表达式来查找网页中的某些元素。元素在表中的<h2>All Users</h2> <ul *ngFor="let user of users"> <li>{{user.name}}</li> <ul *ngFor="let hob of user.hobby"> <li>{{hob.hobbyType}}</li> 中。问题是tr有两种类型:

tr

我想从这两种类型中获取内容。

当我尝试使用<tr class="even"> <tr class="odd"> 时,它以正确的方式工作。但是,当我使用.find_all()时,我发现它也能正常工作,但问题是选择器看起来难以辨认。我可以使选择器更具可读性和简洁性吗?

使用.select()

.find_all()

使用soup.find("table",class_="rightLinks").find_all("tr",class_=["even","odd"])

.select()

如何使后者更具可读性和简洁性?

1 个答案:

答案 0 :(得分:1)

快到了。只需简化您的逻辑或CSS选择器(try { var result = await httpClient.GetAsync(endpoint); var response = await result.Content.ReadAsStringAsync(); data = JsonConvert.DeserializeObject<TResult>(response); } catch (Exception exp) { Console.Write(exp.InnerMessage); } )。

,

原始

您可以使用选择器模板不重复公用部分soup.select("table.rightLinks tr.even,tr.odd"))

table.rightLinks tr.

目标表中仅存在selector_template = "table.rightLinks tr.{cls}" soup.select(", ".join((selector_template.format(cls="even"), selector_template.format(cls="odd")))) even tr类吗?如果是这样,为什么不简单地使用odd