我是 Target.com 上的賣家,我正在嘗試使用 Python (Python 3) 抓取我目錄中每個產品的 URL。當我嘗試這個時,我得到了一個空串列 'urllist',當我列印變數 'soup' 時,BS4 實際收集的是內容“查看頁面源代碼”(原諒我的天真,這里絕對是新手! )。實際上,我真的很想從 Devtools 頁面的“元素”部分中找到的內容中抓取 URL。我可以手動篩選該頁面上的 html 并找到鏈接,所以我知道它們在那里......我只是還不夠了解告訴 BS4 那是我想要搜索的內容。我怎樣才能做到這一點?
import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
import ssl
#Need this part below for HTTPS
ctx=ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
#Needs that context = ctx line to deal with HTTPS
url = input('Enter URL: ')
urllist=[]
html = urllib.request.urlopen(url, context = ctx).read()
soup=BeautifulSoup(html, 'html.parser')
for link in soup.find_all('a'):
urllist.append(link.get('href'))
print(urllist)
如果有幫助,我發現有人用 Java 開發的代碼可以從開發人員控制臺運行,該代碼可以作業并抓取我的所有鏈接。但我的目標是能夠在 Python (Python 3) 中做到這一點
var x = document.querySelectorAll("a");
var myarray = []
for (var i=0; i<x.length; i ){
var nametext = x[i].textContent;
var cleantext = nametext.replace(/\s /g, ' ').trim();
var cleanlink = x[i].href;
myarray.push([cleantext,cleanlink]);
};
function make_table() {
var table = '<table><thead><th>Name</th><th>Links</th></thead><tbody>';
for (var i=0; i<myarray.length; i ) {
table = '<tr><td>' myarray[i][0] '</td><td>' myarray[i][1] '</td></tr>';
};
var w = window.open("");
w.document.write(table);
}
make_table()
uj5u.com熱心網友回復:
我懷疑這是因為 Target 的網站(至少是主頁)通過 Javascript 構建頁面內容。您的瀏覽器能夠呈現頁面的源代碼,但您的 Python 代碼沒有這樣的功能。請參閱此帖子以獲取這方面的幫助。
uj5u.com熱心網友回復:
從根本上講,無需深入了解代碼的細節,如果您可以呼叫 url - 您就擁有了該 url。如果使用腳本的時候刮一個輸入的網址-這可能通過輸入正確的修訂記錄urllist條目(每個回傳的物件.link.get(“href”屬性)) 。
如果您有其他一些原始來源(串列?)用于抓取 url,則可以將其添加到urllist 中。-object 以類似的方式。
選擇的操作程序取決于.link.get('href'))回傳的實際資料結構。建議:
- 如果它是一個包含 html 的字串,則將該字串放入字典鍵 'html' 中,并添加另一個字典鍵 'url'
- 如果它已經是一個 dict 物件:只需添加一個鍵值對“url”。
- 如果您想輸入一個網址并從該網址的 html 檔案中提取其他網址,請檢索 html 并使用 ElementTree 之類的內容對其進行決議
您可以通過多種方式執行此操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/377772.html
上一篇:無法在網頁上列印此div中的資訊?-嘗試了多種方法-Python-BS4
下一篇:抓取資料HTML表格
