从 craigslist 搜索中抓取每张图片

问题描述 投票:0回答:5

我试图从 craigslist 搜索中提取每个图像 URL,但似乎无法深入到 URL 本身。当我尝试

soup.find_all("a", { "class":"result-image gallery"} )[0].img
时,它不会返回任何内容。

具体来说,我要抓取的页面是 https://raleigh.craigslist.org/search/rea?query=duplex&sort=date&availabilityMode=0&sale_date=all+dates

我正在尝试在以下位置获取图像

src
https://images.craigslist.org/00j0j_cC4PhAMdHLj_300x300.jpg

超级令人沮丧的事情是,我昨天成功地做到了这一点,但当时没有将该工作代码提交到 Github。我不小心删除了它,无法弄清楚我最初做了什么来使这项工作:(

python image web-scraping beautifulsoup src
5个回答
2
投票

您应该尝试自动化

selenium
库。它允许您抓取动态渲染请求(js或ajax)页面数据。

from selenium import webdriver
from bs4 import BeautifulSoup
import time
from bs4.element import Tag

driver = webdriver.Chrome('/usr/bin/chromedriver')
driver.get('https://raleigh.craigslist.org/search/rea?query=duplex&sort=date&availabilityMode=0&sale_date=all+dates')
time.sleep(3)

soup = BeautifulSoup(driver.page_source,'lxml')
rowArray = soup.find_all("li", { "class":"result-row"})

for row in rowArray:
    img = row.find("img")
    if img is None:
        continue
    if isinstance(img,Tag) and img.has_attr("src"):
        print(img['src'])
        print("----------------") 

O/P:

https://images.craigslist.org/00U0U_azwRntzeNXr_300x300.jpg
----------------
https://images.craigslist.org/00101_h0xsGArMWPh_300x300.jpg
----------------
https://images.craigslist.org/00J0J_2EzptPF9ysn_300x300.jpg
----------------
https://images.craigslist.org/00101_2FiqAHsu509_300x300.jpg
----------------
https://images.craigslist.org/00D0D_jQbpUTsk6o3_300x300.jpg

其中

'/usr/bin/chromedriver'
selenium Web 驱动程序路径。

下载适用于 chrome 浏览器的 selenium Web 驱动程序:

http://chromedriver.chromium.org/downloads

安装 Chrome 浏览器的网络驱动程序:

https://christopher.su/2015/selenium-chromedriver-ubuntu/

硒教程:

https://selenium-python.readthedocs.io/


1
投票

您只需要请求和登陆页面。

您可以根据页面上的 id 进行构造(并获取每个属性的所有图像)

data-ids
属性提供了关联图像的 id 列表,您可以使用它来构造每个图像 url。

<a href="https://raleigh.craigslist.org/reo/d/rocky-mount-off-market-multifamily/6892616013.html" class="result-image gallery" data-ids="1:00j0j_cC4PhAMdHLj"><img alt="" class="" src="https://images.craigslist.org/00j0j_cC4PhAMdHLj_300x300.jpg">
    <span class="result-price">$99000</span>
</a>

from bs4 import BeautifulSoup as bs
import requests

image_url = 'https://images.craigslist.org/{}_300x300.jpg'
r = requests.get('https://raleigh.craigslist.org/search/rea?query=duplex&sort=date&availabilityMode=0&sale_date=all+dates')
soup = bs(r.content, 'lxml')
ids = [item['data-ids'].replace('1:','') for item in soup.select('.result-image[data-ids]')] 
images = [image_url.format(j) for i in ids for j in i.split(',')]
print(images)

0
投票

您似乎只想获取第一个图像网址。因此,您可以只使用

find
而不是
find_all

此外,要获取 URL,您还需要从

src
获取
img
属性。

soup.find("a", { "class":"result-image gallery"} ).img["src"]

0
投票
    import requests
    from bs4 import BeautifulSoup

    r = requests.get("url here")
    soup = BeautifulSoup(r.content, features="html.parser")
    image_link = soup.find("div", { "class":"slide first visible"} ).img["src"]

如果 craigslist 更改 html 布局,您可能必须更改标签类型 (div) 和类标识符。


0
投票

Abudaminerals +27791858198。我们专注于拥有丰富的经验和技能以及对非洲采矿业的了解,我们能够在采矿、贸易、投资方面全程指导您,并且凭借我们对该行业的广泛了解,我们致力于为您的所有矿产贸易需求提供可靠、及时且经济高效的解决方案。我们是直接从非洲大陆矿山采购的优质矿物的领先供应商。我们经验丰富的专业团队致力于确保我们的客户获得最好的产品和服务。从刚果民主共和国深处到迪拜再到纽约,我们提供物流和运输服务,以确保矿物安全高效地从矿山运输到客户所在地。如需了解更多信息,请致电 Abuda +27791858198 或访问我们的网站:www. abudaminerals.com

© www.soinside.com 2019 - 2024. All rights reserved.