Python 在特定网站上删除问题

Python 在特定网站上删除问题,python,web-scraping,python-requests,Python,Web Scraping,Python Requests,这是我关于堆栈溢出的第一个问题,请耐心听我说 我正在尝试从网站上自动下载(即,删除)一些意大利法律的文本: 我使用下面的代码(以及类似的排列): 如您所见,我正在尝试加载“caricaArticolo”查询 但是,输出的页面表明我的搜索无效(“会话无效或已过期”) 页面似乎意识到我没有使用浏览器,并加载了一个“breakout”javascript函数 <body onload="javascript:breakout();"> 我尝试使用“浏览器”模拟器python脚本,如s

这是我关于堆栈溢出的第一个问题,请耐心听我说

我正在尝试从网站上自动下载(即,删除)一些意大利法律的文本:

我使用下面的代码(以及类似的排列):

如您所见,我正在尝试加载“caricaArticolo”查询

但是,输出的页面表明我的搜索无效(“会话无效或已过期”

页面似乎意识到我没有使用浏览器,并加载了一个“breakout”javascript函数

<body onload="javascript:breakout();">

我尝试使用“浏览器”模拟器python脚本,如seleniumrobobrowser,但结果是一样的


是否有人愿意花10分钟查看页面输出并提供帮助?

一旦您在打开开发工具的页面上单击任何链接,请在“网络”下的“文档”选项卡下:

您可以看到三个链接,第一个是我们单击的内容,第二个返回允许您跳转到特定文章的html,最后一个包含文章文本

在从firstlink返回的源代码中,您可以看到两个iframe标记:

第一个文本文件的片段:

                IL PRESIDENTE DELLA REPUBBLICA
  Visti  gli  articoli 76, 87 e 117, secondo comma, lettera d), della
Costituzione;
  Vistala   legge  28  novembre  2005,  n.  246  e,  in  particolare,
l'articolo 14:
   comma  14, cosi' come sostituito dall'articolo 4, comma 1, lettera
a),  della  legge  18  giugno  2009,  n.  69,  con  il quale e' stata
conferita  al  Governo la delega ad adottare, con le modalita' di cui
all'articolo 20 della legge 15 marzo 1997, n. 59, decreti legislativi
che  individuano  le  disposizioni  legislative  statali,  pubblicate
anteriormente   al   1°   gennaio   1970,  anche  se  modificate  con
provvedimenti  successivi,  delle  quali si ritiene indispensabile la
permanenza  in vigore, secondo i principi e criteri direttivi fissati
nello stesso comma 14, dalla lettera a) alla lettera h);
   comma  15,  con cui si stabilisce che i decreti legislativi di cui
al  citato  comma 14, provvedono, altresi', alla semplificazione o al
riassetto  della materia che ne e' oggetto, nel rispetto dei principi
e criteri direttivi di cui all'articolo 20 della legge 15 marzo 1997,
n.  59,  anche  al  fine  di armonizzare le disposizioni mantenute in
vigore con quelle pubblicate successivamente alla data del 1° gennaio
1970;
   comma 22, con cui si stabiliscono i termini per l'acquisizione del
prescritto  parere  da  parte  della  Commissione parlamentare per la
semplificazione;
  Visto  il  decreto  legislativo  30  luglio  1999,  n. 300, recante
riforma  dell'organizzazione  del  Governo,  a norma dell'articolo 11
della  legge  15 marzo 1997, n. 59 e, in particolare, gli articoli da
20 a 22;

太棒了,太棒了,太棒了。它起作用了。只需稍加编辑即可清除导入内容,但效果非常好。非常感谢。我刚刚发现python的潜力,您让我的旅程更加轻松,完成了这项特定任务。我不会独自解决这个问题

import requests, sys
import os
from urllib.parse import urljoin
from bs4 import BeautifulSoup
import io
user_agent = {'User-agent': 'Mozilla/5.0', 'Connection': 'keep-alive'}

url = 'http://www.normattiva.it/atto/caricaArticolo?art.progressivo=0&art.idArticolo=1&art.versione=1&art.codiceRedazionale=047U0001&art.dataPubblicazioneGazzetta=1947-12-27&atto.tipoProvvedimento=COSTITUZIONE&art.idGruppo=1&art.idSottoArticolo1=10&art.idSottoArticolo=1&art.flagTipoArticolo=0#art'

with requests.session() as s:
    s.headers.update(user_agent)
    r = s.get("http://www.normattiva.it/")
    soup = BeautifulSoup(r.content, "lxml")
    # get all the links from the initial page
    for a in soup.select("div.testo p a[href^=http]"):
        soup = BeautifulSoup(s.get(a["href"]).content)
        # The link to the text is in a iframe tag retuened from the previous get.

        text_src_link = soup.select_one("#mainFrame")["src"]

        # Pick something to make the names unique
        with io.open(os.path.basename(text_src_link), "w", encoding="utf-8") as f:
            # The text is in pre tag that is in the  div with the pre class
            text = BeautifulSoup(s.get(urljoin("http://www.normattiva.it", text_src_link)).content, "html.parser")\
                .select_one("div.wrapper_pre pre").text
            f.write(text)

@terzin要访问该页面,首先需要有授权用户。您没有有效的会话。我尝试了相同的代码,并使用“beautifulsoup”获得了所需的输出。这是一个非常强大的库,可以满足您的需要。@ArundasR,您无法获得所需的文本。
import requests, sys
import os
from urlparse import urljoin
import io
user_agent = {'User-agent': 'Mozilla/5.0', 'Connection': 'keep-alive'}

url = 'http://www.normattiva.it/atto/caricaArticolo?art.progressivo=0&art.idArticolo=1&art.versione=1&art.codiceRedazionale=047U0001&art.dataPubblicazioneGazzetta=1947-12-27&atto.tipoProvvedimento=COSTITUZIONE&art.idGruppo=1&art.idSottoArticolo1=10&art.idSottoArticolo=1&art.flagTipoArticolo=0#art'

with requests.session() as s:
    s.headers.update(user_agent)
    r = s.get("http://www.normattiva.it/")
    soup = BeautifulSoup(r.content, "lxml")
    # get all the links from the initial page
    for a in soup.select("div.testo p a[href^=http]"):
        soup = BeautifulSoup(s.get(a["href"]).content)
        # The link to the text is in a iframe tag retuened from the previous get.

        text_src_link = soup.select_one("#mainFrame")["src"]

        # Pick something to make the names unique
        with io.open(os.path.basename(text_src_link), "w", encoding="utf-8") as f:
            # The text is in pre tag that is in the  div with the pre class
            text = BeautifulSoup(s.get(urljoin("http://www.normattiva.it", text_src_link)).content, "html.parser")\
                .select_one("div.wrapper_pre pre").text
            f.write(text)
                IL PRESIDENTE DELLA REPUBBLICA
  Visti  gli  articoli 76, 87 e 117, secondo comma, lettera d), della
Costituzione;
  Vistala   legge  28  novembre  2005,  n.  246  e,  in  particolare,
l'articolo 14:
   comma  14, cosi' come sostituito dall'articolo 4, comma 1, lettera
a),  della  legge  18  giugno  2009,  n.  69,  con  il quale e' stata
conferita  al  Governo la delega ad adottare, con le modalita' di cui
all'articolo 20 della legge 15 marzo 1997, n. 59, decreti legislativi
che  individuano  le  disposizioni  legislative  statali,  pubblicate
anteriormente   al   1°   gennaio   1970,  anche  se  modificate  con
provvedimenti  successivi,  delle  quali si ritiene indispensabile la
permanenza  in vigore, secondo i principi e criteri direttivi fissati
nello stesso comma 14, dalla lettera a) alla lettera h);
   comma  15,  con cui si stabilisce che i decreti legislativi di cui
al  citato  comma 14, provvedono, altresi', alla semplificazione o al
riassetto  della materia che ne e' oggetto, nel rispetto dei principi
e criteri direttivi di cui all'articolo 20 della legge 15 marzo 1997,
n.  59,  anche  al  fine  di armonizzare le disposizioni mantenute in
vigore con quelle pubblicate successivamente alla data del 1° gennaio
1970;
   comma 22, con cui si stabiliscono i termini per l'acquisizione del
prescritto  parere  da  parte  della  Commissione parlamentare per la
semplificazione;
  Visto  il  decreto  legislativo  30  luglio  1999,  n. 300, recante
riforma  dell'organizzazione  del  Governo,  a norma dell'articolo 11
della  legge  15 marzo 1997, n. 59 e, in particolare, gli articoli da
20 a 22;
import requests, sys
import os
from urllib.parse import urljoin
from bs4 import BeautifulSoup
import io
user_agent = {'User-agent': 'Mozilla/5.0', 'Connection': 'keep-alive'}

url = 'http://www.normattiva.it/atto/caricaArticolo?art.progressivo=0&art.idArticolo=1&art.versione=1&art.codiceRedazionale=047U0001&art.dataPubblicazioneGazzetta=1947-12-27&atto.tipoProvvedimento=COSTITUZIONE&art.idGruppo=1&art.idSottoArticolo1=10&art.idSottoArticolo=1&art.flagTipoArticolo=0#art'

with requests.session() as s:
    s.headers.update(user_agent)
    r = s.get("http://www.normattiva.it/")
    soup = BeautifulSoup(r.content, "lxml")
    # get all the links from the initial page
    for a in soup.select("div.testo p a[href^=http]"):
        soup = BeautifulSoup(s.get(a["href"]).content)
        # The link to the text is in a iframe tag retuened from the previous get.

        text_src_link = soup.select_one("#mainFrame")["src"]

        # Pick something to make the names unique
        with io.open(os.path.basename(text_src_link), "w", encoding="utf-8") as f:
            # The text is in pre tag that is in the  div with the pre class
            text = BeautifulSoup(s.get(urljoin("http://www.normattiva.it", text_src_link)).content, "html.parser")\
                .select_one("div.wrapper_pre pre").text
            f.write(text)