Python从网页中抓取链接-为什么没有URLS



我是Target.com上的卖家,正在尝试使用Python(Python 3(为目录中的每个产品抓取URL。当我尝试这样做时,我得到了一个"urlist"的空列表,当我打印变量"汤"时,BS4实际收集的是内容";查看页面源";(请原谅我的天真,在这方面绝对是个新手!(。事实上,我真的很想从";元素";Devtools页面的部分。我可以手动筛选页面上的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()

我怀疑这是因为Target的网站(至少是主页(通过Javascript构建页面内容。您的浏览器能够呈现页面的源代码,但您的python代码却无法做到这一点。请参阅此帖子以获得这方面的帮助。

在不讨论代码细节的情况下,从根本上讲,如果你可以调用一个url,你就得到了这个url。如果您使用脚本一次刮取一个输入的url,可以通过对urlist条目(每个.link.get('href'(返回的对象(输入正确的修改来记录。
如果您有其他要刮取的url的原始源(列表?(,则可以将其添加到urlist-对象。

选择的操作过程取决于.link.get('ref'((返回的实际数据结构。建议:

  • 如果是一个包含html的字符串,请将该字符串放在dict键"html"中,然后添加另一个dict密钥"url">
  • 如果它已经是dict对象:只需添加一个键值对"url">
  • 如果您想输入一个url并从url的html文档中提取其他url,请检索html并使用类似ElementTree的东西进行解析

您可以通过多种方式来实现这一点。

最新更新