9

Tôi muốn xóa ảnh khỏi tài khoản Instagram công khai. Tôi khá quen thuộc với bs4 vì vậy tôi bắt đầu với điều đó. Sử dụng trình kiểm tra yếu tố trên Chrome, tôi lưu ý những bức ảnh nằm trong một danh sách không có thứ tự và li có lớp 'ảnh', vì vậy tôi hiểu, cái quái gì - khó có thể cạo được với findAll, đúng không?Cách xóa Instagram với BeautifulSoup

sai: nó không trả lại bất cứ điều gì (mã dưới đây) và tôi sớm nhận thấy rằng mã hiển thị trong thanh tra phần tử và các mã mà tôi rút ra từ yêu cầu là không giống nhau AKA danh sách không có thứ tự trong mã Tôi kéo từ yêu cầu.

Bất kỳ ý tưởng nào về cách tôi có thể lấy mã hiển thị trong trình kiểm tra phần tử?

Chỉ cần cho các hồ sơ, đây là mã của tôi để bắt đầu, mà không làm việc vì danh sách không có thứ tự không có ở đó:

from bs4 import BeautifulSoup 
import requests 
import re 

r = requests.get('http://instagram.com/umnpics/') 
soup = BeautifulSoup(r.text) 
for x in soup.findAll('li', {'class':'photo'}): 
    print x 

Cảm ơn bạn đã giúp đỡ của bạn.

+0

Trang này sử dụng nhiều JavaScript. Bạn muốn xem trang * nguồn * (Chrome: Xem -> Nhà phát triển -> Xem nguồn) để xem nội dung nào được tải xuống bởi trình duyệt của bạn. Những gì bạn thấy trong thanh tra là những gì trình duyệt đã xây dựng sau khi chạy JavaScript được tham chiếu từ trang. –

Trả lời

8

Nếu bạn xem mã nguồn của trang, bạn sẽ thấy rằng một số javascript tạo trang web. Những gì bạn thấy trong trình duyệt yếu tố là trang web sau khi tập lệnh được chạy và beautsoup chỉ nhận được tệp html. Để phân tích cú pháp trang web được hiển thị, bạn cần phải sử dụng một cái gì đó như Selenium để hiển thị trang web cho bạn.

Vì vậy, ví dụ, đây là cách nó sẽ trông với Selenium:

from bs4 import BeautifulSoup 
import selenium.webdriver as webdriver 

url = 'http://instagram.com/umnpics/' 
driver = webdriver.Firefox() 
driver.get(url) 

soup = BeautifulSoup(driver.page_source) 

for x in soup.findAll('li', {'class':'photo'}): 
    print x 

Bây giờ súp nên được những gì bạn đang mong đợi.