特定类别中的Python网络抓取find_all(“ a”)

时间:2018-09-10 18:08:32

标签: python web-scraping beautifulsoup findall

我是Web抓取的新手,正在从事我的小项目。

任务是获取function add(a,b) { return a>b; } ,它们的"cameras""prices"的名称

(来自:https://www.dpreview.com/products/cameras/all?page=1)。

当我在相机上单击以将我路由到新URL时,我得到的最后一个提及。

当我检查页面时,我必须从那里获取URL,但是只需:

"quick specs"

我将获得所有链接(所以还有一些其他信息,例如登录名,社交媒体等)

我想做的只是从特定班级得到的。

您能帮我吗? (或者至少让我指向讨论此内容的教程?)。

我正在使用for link in soup.find_all("a"): print(link.get("href"))

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式找到必要的信息:首先将搜索锚定到td的{​​{1}}产品清单中:

class="product"

输出:

import requests, typing
class Camera(typing.NamedTuple):
  info:typing.List[str]
  quicklook:str
  price:str

from bs4 import BeautifulSoup as soup
d = soup(requests.get('https://www.dpreview.com/products/cameras/all?page=1').text, 'html.parser')
headers = [['div', 'name'], ['div', 'specs'], ['div', 'prices']]
vals = [[(lambda x:getattr(x, 'text', 'N/A') if b != 'name' else [getattr(x, 'text', 'N/A'), i.a['href']])(i.find(a, {'class':b})) for a, b in headers] for i in d.find_all('td', {'class':'product'})]
final_result = [Camera(*i) for i in vals]