使用BeautifulSoup4和Python刮取有序列表

时间:2018-10-11 02:41:49

标签: python html web-scraping beautifulsoup

我对Python / BS4和数据抓取还比较陌生,所以我觉得这是一个简单的问题,但是我很难在网上找到任何资源。

我的目标是使用this site生成随机地址并使用BS4对其进行抓取。

我当前的代码如下:

site = 'https://www.randomlists.com/random-addresses?qty=10'

res = requests.get(site)
soup = bs4.BeautifulSoup(res.text, 'html.parser')

bigdata = soup.find('ol',{'class':'rand_large'})
print(bigdata)

这将返回“无”

我看到我想要的数据在一个'ol'内,我理解这是一个有序列表。过去,我已经做了一些基本的抓取工作,并且感到困惑,为什么上面的代码无法找到'rand_large'。

有什么建议吗?

小型编辑/添加:使用

bigdata = soup.find('div',{'class':'Rand-stage'})

返回:

<div class="Rand-stage"> <div class="Rand-stage-loading"> Loading… </div> </div>

我不知道多余的“东西”从哪里来。

1 个答案:

答案 0 :(得分:1)

In[2]: from bs4 import BeautifulSoup
  ...: from selenium import webdriver
  ...: 
  ...: url = 'https://www.randomlists.com/random-addresses'
  ...: 
  ...: chrome_options = webdriver.ChromeOptions()
  ...: chrome_options.add_argument('--headless')
  ...: driver = webdriver.Chrome(options=chrome_options)
  ...: 
  ...: driver.get('{}?qty={}'.format(url, 1346))
  ...: html = driver.page_source
  ...: driver.quit()
  ...: 
  ...: soup = BeautifulSoup(html, 'lxml')
  ...: result = []
  ...: for li in soup.find('ol', class_='rand_large').find_all('li'):
  ...:     result.append(list(li.stripped_strings))
  ...: 
In[3]: len(result)
Out[3]: 1346
In[4]: result[:10]
Out[4]: 
[['2 Tanglewood Dr.', 'Ringgold, GA 30736'],
 ['7538 South Windfall Avenue', 'Marysville, OH 43040'],
 ['944 Harvey Street', 'Stevens Point, WI 54481'],
 ['804 Smith St.', 'Des Plaines, IL 60016'],
 ['78 Bohemia Road', 'Williamstown, NJ 08094'],
 ['7509 San Juan Dr.', 'Cranston, RI 02920'],
 ['8003 6th Street', 'Inman, SC 29349'],
 ['118 Roosevelt Dr.', 'Fort Worth, TX 76110'],
 ['242 Young Lane', 'Mcdonough, GA 30252'],
 ['3 Marsh St.', 'Bay Shore, NY 11706']]