【问题标题】:Python scraping links from a webpage - Why no URLS?Python 从网页抓取链接 - 为什么没有 URL?
【发布时间】:2021-12-08 21:06:28
【问题描述】:

我是 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()

【问题讨论】:

    标签: python web-scraping beautifulsoup


    【解决方案1】:

    我怀疑这是因为 Target 的网站(至少是主页)通过 Javascript 构建页面内容。您的浏览器能够呈现页面的源代码,但您的 python 代码不这样做。有关这方面的帮助,请参阅 this post

    【讨论】:

    • 这准确地描述并解决了我的问题,谢谢!
    【解决方案2】:

    无需深入了解您的代码细节,从根本上说,如果您可以调用一个 url,那么您已经获得了该 url。如果您当时使用脚本抓取一个输入的 url - 可以通过对 urllist 条目(每个 .link.get('href '))
    如果您有一些其他原始来源(列表?)用于抓取 url,则可以以类似的方式将其添加到 urllist.-对象。

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

    • 如果是包含 html 的字符串,则将该字符串放入 dict key 'html' 中,并添加另一个 dict key 'url'
    • 如果它已经是一个 dict 对象:只需添加一个键值对“url”。
    • 如果您想输入一个网址并从该网址的 html 文档中提取其他网址,请检索该 html 并使用 ElementTree 之类的内容对其进行解析

    您可以通过多种方式做到这一点。

    【讨论】:

    • 抱歉,我认为我的问题解释得很糟糕!我放入 url 变量的 URL 是一个包含大约 50 个 URL 的网页,我想一次获取每个 URL 并将其附加到 urllist。因此,我正在调用包含我的产品列表的网站,每个产品都可以通过单击链接手动访问。我想要那个链接列表。
    • 我明白了。然后有很多选择。您可能想查看 ElementTRee 解析 xml 并筛选出
    猜你喜欢
    • 2023-03-26
    • 2021-11-22
    • 1970-01-01
    • 2020-08-08
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    相关资源
    最近更新 更多