使用Python进行Web Scraping - 循环使用城市名称,单击并获取感兴趣的值

时间:2016-06-22 20:24:25

标签: python web-scraping

这是我第一次使用Python和网页抓取。一直在环顾四周,仍然无法得到我需要做的事情。

以下是我通过Chrome使用的元素的打印屏幕。

正如您所看到的,它来自下拉公寓'。

我尝试做的第一步是从下拉列表中获取城市列表

然后我的第二步,从给定的城市列表,到他们每个人(... url ... / Brantford /例如)

然后,我的第三步,根据可用的公寓,点击每个可用的公寓,以获得每种卧室类型的价格范围

目前,我只是试图“循环”。通过第一步的城市,它不起作用。

如果有一个很好的论坛,文章,教程等对我这样的初学者来说有用的阅读和学习,请你帮我解决一下。我真的很想在这方面做得好,以便有一天我可以把我带到社会。

谢谢!

import requests
from bs4 import BeautifulSoup

url = 'http://www.homestead.ca/apartments-for-rent/'
response = requests.get(url)
html = response.content
soup = BeautifulSoup(html,'lxml')

dropdown_list = soup.find(".child-pages dropdown-menu a href")

print (dropdown_list.prettify())

Screenshot

1 个答案:

答案 0 :(得分:0)

您可以通过类和子“a”节点访问元素。然后访问属性“href”并添加域名。

import requests
from bs4 import BeautifulSoup

url = 'http://www.homestead.ca/apartments-for-rent/'
response = requests.get(url)
html = response.content
soup = BeautifulSoup(html,'lxml')

dropdown_list = soup.select(".primary .child-pages a")
links=['http://www.homestead.ca'+x['href'] for x in dropdown_list]
print (links)

city_names=[x.text for x in dropdown_list]
print (city_names)

result=[]

for link in links:
    response = requests.get(link)
    html = response.content
    soup = BeautifulSoup(html,'lxml')
    ...
    result.append(...)

说明:

soup.select(".primary .child-pages a")

使用CSS选择器我选择“a”节点作为节点的子节点,其类为“child-pages”,它是具有“primary”类的节点的子节点。有两个节点具有类“子页面”,我过滤了一个节点下的“主”类。

[x.text for x in dropdown_list]

这是Python中的列表理解。这意味着我选择了dropdown_list的所有元素,然后只获取每个元素的属性文本,然后作为列表返回。

然后,您可以迭代链接并将数据附加到列表(此处为“结果”)。

我发现BeautifulSoup的介绍相当不错,但没有通过链接:http://programminghistorian.org/lessons/intro-to-beautiful-soup

我还建议你读一本书。例如,这一个:Web Scraping with Python: Collecting Data from the Modern Web