如何使用BeautifulSoup刮取网页网址

时间:2016-05-26 15:29:45

标签: python web-scraping beautifulsoup

我开始使用网页抓取功能,我想从下面的某个页面获取网址。

import requests
from bs4 import BeautifulSoup as Soup

page = "http://www.zillow.com/homes/for_sale/fore_lt/2-_beds/any_days/globalrelevanceex_sort/57.610107,-65.170899,15.707662,-128.452149_rect/3_zm/"    

response = requests.get(page)
soup = Soup(response.text)

现在,我在汤内容中拥有该页面的所有信息,我想获得图像中提供的所有家庭的URL     enter image description here

当我检查家中的任何视频时,Chrome会在图片中打开此DOM元素:

enter image description here

如何使用<a href="">获取soup标记内的链接?我认为父级是<div id = "lis-results">,但是,我需要一种方法来导航到元素。实际上,我需要文本文件中的所有URL(391,479)。

Zillow有一个API和Python包装器,以方便这种数据工作,我现在正在寻找代码。我需要获得的是FOR SALE的网址 - &gt;丧失抵押品赎回权和潜在上市 - &gt;止赎和预先止赎的信息。

1 个答案:

答案 0 :(得分:3)

问题是您发送的请求无法获取网址。事实上,如果我查看响应(使用例如jupyter),我得到: Missing the important part

我建议采用不同的策略:这类网站经常通过json文件进行通信。

在Firefox的Network标签中,您可以找到请求json文件的网址:

Firefox Network Tab

现在,通过此文件,您可以获得所需的所有信息。

Web Developer

汤有你想要的东西。如果你探索json,你会发现很多有用的信息。 可以使用

查找所有URL的列表
import json
page = "http://www.zillow.com/search/GetResults.htm?spt=homes&status=110001&lt=001000&ht=111111&pr=,&mp=,&bd=2%2C&ba=0%2C&sf=,&lot=,&yr=,&pho=0&pets=0&parking=0&laundry=0&income-restricted=0&pnd=0&red=0&zso=0&days=any&ds=all&pmf=1&pf=1&zoom=3&rect=-134340820,16594081,-56469727,54952386&p=1&sort=globalrelevanceex&search=maplist&disp=1&listright=true&isMapSearch=true&zoom=3"
response = requests.get(page) # request the json file
json_response =  json.loads(response.text) # parse the json file
soup = Soup(json_response['list']['listHTML'], 'html.parser')

所有网址都会出现两次。如果您希望它们是唯一的,您可以修复列表,或者在上面的课程中查找links = [i.attrs['href'] for i in soup.findAll("a",{"class":"hdp-link"})] 。 但是,我总是喜欢更多的东西!