使用Beautifulsoup进行网页抓取

时间:2019-07-28 17:01:43

标签: python

我是Python的新手,它试图从以下网站“ https://www.kaggle.com/c/whats-cooking”中获取所有下拉列表的列表,但未成功。

下面的代码产生一个空列表

  import requests
  from bs4 import BeautifulSoup
  from urllib.parse import urljoin
  import re
  import pandas as pd

  page = "https://www.sfma.org.sg/member/category"
  information = requests.get(page)
  soup = BeautifulSoup(information.content, 'html.parser')
  categories = soup.find_all('select', attrs={'class' :'w3-select w3-border'})

所需的输出是以下列表:-

['Alcoholic Beverage','Beer','Bottled 
  Beverage',..........,'Trader','Wholesaler']

谢谢!!

2 个答案:

答案 0 :(得分:0)

这不是一个正确的问题,但仍然是。

categories = soup.find("select", attrs={"name": "ctype"}).find_all('option')

result = [cat.get_text() for cat in categories]

答案 1 :(得分:0)

这些选项是通过Javascript加载的,但是数据在页面上。使用一些粗略的正则表达式,您可以提取它:

import re
import json
import requests

url = 'https://www.sfma.org.sg/member/category/'
text = requests.get(url).text

d = re.findall(r'var\s*cObject\s*=\s*(.*)\s*;', text)[0]
d = re.sub(r'(\w+)(?=:)', r'"\1"', d)
d = json.loads(d.replace("'", '"'))

from pprint import pprint
pprint(d, width=200)

打印:

{'category': [{'cat_type': '1', 'id': '1', 'name': 'Alcoholic Beverage', 'permalink': 'alcoholic-beverage', 'status': '2'},
              {'cat_type': '1', 'id': '2', 'name': 'Beer', 'permalink': 'beer', 'status': '2'},
              {'cat_type': '1', 'id': '3', 'name': 'Bottled Beverage', 'permalink': 'bottled-beverage', 'status': '2'},
              {'cat_type': '1', 'id': '4', 'name': 'Canned Beverage', 'permalink': 'canned-beverage', 'status': '2'},
              {'cat_type': '1', 'id': '5', 'name': 'Carbonated Beverage', 'permalink': 'carbonated-beverage', 'status': '2'},
              {'cat_type': '1', 'id': '6', 'name': 'Cereal / Grain Beverage', 'permalink': 'cereal-grain-beverage', 'status': '2'},
              {'cat_type': '1', 'id': '7', 'name': 'Cider', 'permalink': 'cider', 'status': '2'},
              {'cat_type': '1', 'id': '8', 'name': 'Coffee', 'permalink': 'coffee', 'status': '2'},
              {'cat_type': '1', 'id': '9', 'name': 'Distilled Water', 'permalink': 'distilled-water', 'status': '2'},
              {'cat_type': '1', 'id': '10', 'name': 'Fruit / Vegetable Juice', 'permalink': 'fruit-vegetable-juice', 'status': '2'},
              {'cat_type': '1', 'id': '11', 'name': 'Herbal Beverage', 'permalink': 'herbal-beverage', 'status': '2'},
              {'cat_type': '1', 'id': '12', 'name': 'Instant Beverage', 'permalink': 'instant-beverage', 'status': '2'},
              {'cat_type': '1', 'id': '13', 'name': 'Milk', 'permalink': 'milk', 'status': '2'},
              {'cat_type': '1', 'id': '14', 'name': 'Mineral Water', 'permalink': 'mineral-water', 'status': '2'},

...and so on.

编辑:仅打印类别名称,您可以执行以下操作:

for c in d['category']:
    print(c['name'])

打印:

Alcoholic Beverage
Beer
Bottled Beverage
Canned Beverage
Carbonated Beverage
Cereal / Grain Beverage
Cider

...

Manufacturer
Restaurant
Retail Outlet
Supplier
Trader
Wholesaler