我正在尝试从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。从那以后,我不小心删除了它,无法弄清楚我最初为完成这项工作所做的事情:(
答案 0 :(得分:0)
似乎您正在尝试仅获取第一个图像URL。因此,您可以只使用find
而不是find_all
。
另外,要获取URL,还需要从src
获取img
属性。
soup.find("a", { "class":"result-image gallery"} ).img["src"]
答案 1 :(得分:0)
您应该尝试使用自动化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'
硒Web驱动程序路径。
下载适用于Chrome浏览器的Selenium Web驱动程序:
http://chromedriver.chromium.org/downloads
为Chrome浏览器安装Web驱动程序:
https://christopher.su/2015/selenium-chromedriver-ubuntu/
硒教程:
答案 2 :(得分:0)
您只需要请求和登录页面。
您可以根据页面上的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)
答案 3 :(得分: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)和类标识符。