簡體   English   中英

從 craigslist 搜索中抓取每張圖片

[英]Scraping each image from a craigslist search

我試圖從 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。 從那以后我不小心刪除了它,無法弄清楚我最初做了什么來完成這項工作:(

您應該嘗試自動化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("----------------") 

開/關:

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 瀏覽器安裝 web 驅動程序:

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

硒教程:

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

您只需要請求和登錄頁面。

您可以從頁面上的 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)

您似乎只想獲取第一個圖片網址。 因此,您可以使用find而不是find_all

此外,要獲取 URL,您還需要從img獲取src屬性。

soup.find("a", { "class":"result-image gallery"} ).img["src"]
    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) 和類標識符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM