gpt4 book ai didi

python - 使用 href 引用抓取网站

转载 作者:太空宇宙 更新时间:2023-11-04 09:07:02 26 4
gpt4 key购买 nike

我正在使用 scrapy,我想通过 www.rentler.com 进行抓取。我已经到网站上搜索了我感兴趣的城市,这是搜索结果的链接:

https://www.rentler.com/search?Location=millcreek&MaxPrice=

现在,我感兴趣的所有列表都包含在那个页面上,我想递归地逐一浏览它们。

每个列表都列在:

<body>/<div id="wrap">/<div class="container search-res">/<ul class="search-results"><li class="result">

每个结果都有一个 <a class="search-result-link" href="/listing/288910">

我知道我需要为 crawlspider 创建一个规则并让它查看 href 并将其附加到 url。这样它就可以转到每个页面,并获取我感兴趣的数据。

我想我需要这样的东西:

rules = (Rule(SgmlLinkExtractor(allow="not sure what to insert here, but this is where I think I need to href appending", callback='parse_item', follow=true),)

更新*感谢您的输入。这是我现在拥有的,它似乎可以运行但不会抓取:*

import re
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from KSL.items import KSLitem

class KSL(CrawlSpider):
name = "ksl"
allowed_domains = ["https://www.rentler.com"]
start_urls = ["https://www.rentler.com/ksl/listing/index/?sid=17403849&nid=651&ad=452978"]
regex_pattern = '<a href="listing/(.*?) class="search-result-link">'

def parse_item(self, response):
items = []
hxs = HtmlXPathSelector(response)
sites = re.findall(regex_pattern, "https://www.rentler.com/search?location=millcreek&MaxPrice=")

for site in sites:
item = KSLitem()
item['price'] = site.select('//div[@class="price"]/text()').extract()
item['address'] = site.select('//div[@class="address"]/text()').extract()
item['stats'] = site.select('//ul[@class="basic-stats"]/li/div[@class="count"]/text()').extract()
item['description'] = site.select('//div[@class="description"]/div/p/text()').extract()
items.append(item)
return items

想法?

最佳答案

如果你需要从 html 文件中抓取数据,我建议使用 BeautifulSoup , 安装和使用都非常简单:

from bs4 import BeautifulSoup

bs = BeautifulSoup(html)
for link in bs.find_all('a'):
if link.has_attr('href'):
print link.attrs['href']

这个小脚本会获取 a HTML 标签内的所有 href

编辑:全功能脚本:

我在我的电脑上测试了这个,结果符合预期,BeautifulSoup 需要纯 HTML,你可以从中抓取你需要的东西,看看这段代码:

import requests
from bs4 import BeautifulSoup

html = requests.get(
'https://www.rentler.com/search?Location=millcreek&MaxPrice=').text
bs = BeautifulSoup(html)
possible_links = bs.find_all('a')
for link in possible_links:
if link.has_attr('href'):
print link.attrs['href']

这只告诉你如何从你试图抓取的 html 页面中抓取 href,当然你可以在 scrapy 中使用它,正如我告诉你的,BeautifulSoup 只需要纯 HTML,这就是我使用 的原因requests.get(url).text 并且你可以从中抓取。所以我想 scrapy 可以将纯 HTML 传递给 BeautifulSoup。

编辑 2好吧,你看我认为你根本不需要 scrapy,所以如果前面的脚本为你提供了所有你想从作品中获取数据的链接,你只需要做这样的事情:

假设我有一个有效的 url 列表,我想从中获取特定数据,比如价格、英亩、地址......你可以只用以前的脚本来实现它,而不是将 url 打印到屏幕上,你可以将它们附加到列表中并仅附加以 /listing/ 开头的那些。这样你就有了一个有效的 url 列表。

for url in valid_urls:
bs = BeautifulSoup(requests.get(url).text)
price = bs.find('span', {'class': 'amount'}).text
print price

您只需查看源代码,就会了解如何从每个 url 中抓取所需的数据。

关于python - 使用 href 引用抓取网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19429126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com