循环自动从几页收集网页数据

时间:2019-01-12 22:21:12

标签: python web-scraping

由于我一直在尝试找出如何进行循环且无法从其他线程进行循环,因此我需要帮助。我对此很陌生,因此编辑现有代码对我来说很难。

我正在尝试从网站上收集剪贴数据。到目前为止,这是我所做的,但是我必须“手动”插入页面。我希望它自动将zl / m2中的价格从1到20页取消:

import requests
from bs4 import BeautifulSoup

link=("https://ogloszenia.trojmiasto.pl/nieruchomosci-mam-do-wynajecia/wi,100.html?strona=1")
page = requests.get(link).text

link1=("https://ogloszenia.trojmiasto.pl/nieruchomosci-mam-do-wynajecia/wi,100.html?strona=2")
page1 = requests.get(link1).text

link2=("https://ogloszenia.trojmiasto.pl/nieruchomosci-mam-do-wynajecia/wi,100.html?strona=3")
page2 = requests.get(link2).text

pages=page+page1+page2+page3+page4+page5+page6

soup = 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=20
baselink="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 个答案:

答案 0 :(得分:0)

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

for i in range (1,npages+1):
    link=baselink+str(i)
    page = requests.get(link).text

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

pages = ""
for i in range (1,npages+1):
    link=baselink+str(i)
    pages += requests.get(link).text

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

with open(samplefilepath, mode="w+") as output_file:
    for price in prices:
        print(price, file=output_file)

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