【发布时间】:2021-12-05 08:12:52
【问题描述】:
我正在尝试获取三个状态的数据,基于相同的 url 格式。
states = ['123', '124', '125']
urls = []
for state in states:
url = f'www.something.com/geo={state}'
urls.append(url)
从那里我有三个独立的网址,每个网址都包含不同的状态 ID。
但是当我通过 BS 处理它时,输出只显示来自状态 123 的数据。
for url in urls:
client = ScrapingBeeClient(api_key="API_KEY")
response = client.get(url)
doc = BeautifulSoup(response.text, 'html.parser')
随后我用这个提取了我想要的列:
listings = doc.select('.is-9-desktop')
rows = []
for listing in listings:
row = {}
try:
row['name'] = listing.select_one('.result-title').text.strip()
except:
print("no name")
try:
row['add'] = listing.select_one('.address-text').text.strip()
except:
print("no add")
try:
row['mention'] = listing.select_one('.review-mention-block').text.strip()
except:
pass
rows.append(row)
但如前所述,它仅显示状态 123 的数据。如果有人能告诉我哪里出错了,不胜感激,谢谢!
编辑
我将 URL 输出添加到列表中,并且能够获取所有三种状态的数据。
doc = []
for url in urls:
client = ScrapingBeeClient(api_key="API_KEY")
response = client.get(url)
docs = BeautifulSoup(response.text, 'html.parser')
doc.append(docs)
但是当我通过 BS 运行它时,它导致了错误消息:
属性错误:“列表”对象没有属性选择。
我是否通过另一个循环运行它?
【问题讨论】:
-
rows=[]应该在您遍历 url 列表时首先出现 -
url = f'www.something.com/geo={states}'应该是url = f'www.something.com/geo={state}' -
@The_spider 在我看来都一样!
-
states变成state
-
您每次使用
rows=[]都会重置行。它应该在你的循环之外。
标签: python web-scraping beautifulsoup