我开始使用网页抓取功能,我想从下面的某个页面获取网址。
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
当我检查家中的任何视频时,Chrome会在图片中打开此DOM元素:
如何使用<a href="">
获取soup
标记内的链接?我认为父级是<div id = "lis-results">
,但是,我需要一种方法来导航到元素。实际上,我需要文本文件中的所有URL(391,479)。
Zillow有一个API和Python包装器,以方便这种数据工作,我现在正在寻找代码。我需要获得的是FOR SALE的网址 - &gt;丧失抵押品赎回权和潜在上市 - &gt;止赎和预先止赎的信息。
答案 0 :(得分:3)
问题是您发送的请求无法获取网址。事实上,如果我查看响应(使用例如jupyter),我得到:
我建议采用不同的策略:这类网站经常通过json文件进行通信。
在Firefox的Network
标签中,您可以找到请求json文件的网址:
现在,通过此文件,您可以获得所需的所有信息。
Web Developer
汤有你想要的东西。如果你探索json,你会发现很多有用的信息。 可以使用
查找所有URL的列表import json
page = "http://www.zillow.com/search/GetResults.htm?spt=homes&status=110001<=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"})]
。
但是,我总是喜欢更多的东西!