为了账号安全,请及时绑定邮箱和手机立即绑定

循环从几页自动抓取数据

循环从几页自动抓取数据

蓝山帝景 2021-10-10 13:41:24
由于我一直在试图弄清楚如何制作一个循环而我无法从其他线程中制作它,因此我需要帮助。我对此完全陌生,因此编辑现有代码对我来说很难。我正在尝试从网站上抓取数据。这是我到目前为止所做的,但我必须“手动”插入页面。我希望它自动从 1 到 20 页以 zl/m2 为单位抓取价格,例如:import requestsfrom bs4 import BeautifulSouplink=("https://ogloszenia.trojmiasto.pl/nieruchomosci-mam-do-wynajecia/wi,100.html?strona=1")page = requests.get(link).textlink1=("https://ogloszenia.trojmiasto.pl/nieruchomosci-mam-do-wynajecia/wi,100.html?strona=2")page1 = requests.get(link1).textlink2=("https://ogloszenia.trojmiasto.pl/nieruchomosci-mam-do-wynajecia/wi,100.html?strona=3")page2 = requests.get(link2).textpages=page+page1+page2+page3+page4+page5+page6soup = BeautifulSoup(pages, 'html.parser')price_box = soup.findAll('p', attrs={'class':'list__item__details__info details--info--price'})prices=[]for i in range(len(price_box)):prices.append(price_box[i].text.strip())prices    我试过这段代码,但卡住了。我不知道我应该添加什么来一次从 20 页获取输出以及如何将其保存到 csv 文件。npages=20baselink="https://ogloszenia.trojmiasto.pl/nieruchomosci-mam-do-wynajecia/wi,100.html?strona="for i in range (1,npages+1):link=baselink+str(i)page = requests.get(link).text在此先感谢您的帮助。
查看完整描述

1 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

Python 对空格敏感,因此任何循环的代码块都需要缩进,如下所示:


for i in range (1,npages+1):

    link=baselink+str(i)

    page = requests.get(link).text

如果您希望所有页面都在一个字符串中(因此您可以使用与上面的 pages 变量相同的方法),您可以将这些字符串附加到循环中:


pages = ""

for i in range (1,npages+1):

    link=baselink+str(i)

    pages += requests.get(link).text

要使用结果创建 csv 文件,您可以查看 python 内置csv 模块中的 csv.writer() 方法,但我通常发现使用 print() 写入文件更容易:


with open(samplefilepath, mode="w+") as output_file:

    for price in prices:

        print(price, file=output_file)

w+告诉python如果文件不存在则创建文件,如果存在则覆盖。a+如果存在,将附加到现有文件


查看完整回答
反对 回复 2021-10-10
  • 1 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信