【发布时间】:2018-10-23 14:04:36
【问题描述】:
下面我有从 craigslist 中提取记录的代码。一切都很好,但我需要能够进入下一组记录并重复相同的过程,但对于编程来说,我被困住了。从查看页面代码看来,我应该单击此处跨度中包含的箭头按钮,直到它不包含 href:
<a href="/search/syp?s=120" class="button next" title="next page">next > </a>
我在想这可能是一个循环中的一个循环,但我想这也可能是一个尝试/例外情况。听起来对吗?你将如何实现它?
import requests
from urllib.request import urlopen
import pandas as pd
response = requests.get("https://nh.craigslist.org/d/computer-parts/search/syp")
soup = BeautifulSoup(response.text,"lxml")
listings = soup.find_all('li', class_= "result-row")
base_url = 'https://nh.craigslist.org/d/computer-parts/search/'
next_url = soup.find_all('a', class_= "button next")
dates = []
titles = []
prices = []
hoods = []
while base_url !=
for listing in listings:
datar = listing.find('time', {'class': ["result-date"]}).text
dates.append(datar)
title = listing.find('a', {'class': ["result-title"]}).text
titles.append(title)
try:
price = listing.find('span', {'class': "result-price"}).text
prices.append(price)
except:
prices.append('missing')
try:
hood = listing.find('span', {'class': "result-hood"}).text
hoods.append(hood)
except:
hoods.append('missing')
#write the lists to a dataframe
listings_df = pd.DataFrame({'Date': dates, 'Titles' : titles, 'Price' : prices, 'Location' : hoods})
#write to a file
listings_df.to_csv("craigslist_listings.csv")
【问题讨论】:
-
每个页面的请求都应该在循环中进行。您需要确保
find_all每次为下一页锚元素返回最多 1 个元素。然后循环的下一次迭代应该请求设置为该元素的href属性的url。当无法再找到此元素或href属性为空字符串时终止循环。
标签: python pandas beautifulsoup