Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中拖网;分页问题_Python_Beautifulsoup_Jupyter Notebook_Screen Scraping - Fatal编程技术网

在Python中拖网;分页问题

在Python中拖网;分页问题,python,beautifulsoup,jupyter-notebook,screen-scraping,Python,Beautifulsoup,Jupyter Notebook,Screen Scraping,我还是一个初学者,如果这是一个愚蠢的问题,我很抱歉。我试图通过Jupyter笔记本刮取一些新文章供我的主分析,但我正在努力分页。我怎样才能解决这个问题 代码如下: from bs4 import BeautifulSoup import requests import pandas as pd danas = [] base_url = 'https://www.danas.rs/tag/izbori-2020/page/' r = requests.get(base_url) c = r.

我还是一个初学者,如果这是一个愚蠢的问题,我很抱歉。我试图通过Jupyter笔记本刮取一些新文章供我的主分析,但我正在努力分页。我怎样才能解决这个问题

代码如下:

from bs4 import BeautifulSoup
import requests
import pandas as pd

danas = []

base_url = 'https://www.danas.rs/tag/izbori-2020/page/'
r = requests.get(base_url)
c = r.content

soup = BeautifulSoup(c,"html.parser")
    
paging = soup.find("div",{"column is-8"}).find("div",{"nav-links"}).find_all("a")
start_page = paging[1].int
last_page = paging[len(paging)-1].int
web_content_list = []

for page_number in range(int(float(start_page)),int(float(last_page)) + 1):
    
    url = base_url+str(page_number)+"/.html"
    r = requests.get(base_url+str(page_number))
    c = r.content
    soup = BeautifulSoup(c,"html.parser")
    
    if r.status_code == 200:
        soup = BeautifulSoup(r.content, 'html.parser')
    
        try:
            headline = soup.find('h1', {'class': 'post-title'}).text.strip()
        except:
            headline = None
            
        try:
            time = soup.find('time', {'class': 'entry-date published'}).text.strip()[:17]
        except:
            time = None
            
        try:
            descr = soup.find('div', {'class': 'post-intro-content content'}).text.strip()
        except:
            descr = None
           
        try:
            txt = soup.find('div', {'class': 'post-content content'}).text.strip()
        except:
            txt = None
            
        # create a list with all scraped info
        danas = [headline,
                        date,
                        time,
                        descr,
                        txt]
        
        web_content_list.append(danas)
            
    else:
        print('Oh No! ' + l)
        
dh = pd.DataFrame(danas)
dh.head()
下面是弹出的错误:

*AttributeError                            Traceback (most recent call last)
<ipython-input-10-1c9e3a7e6f48> in <module>
     11 soup = BeautifulSoup(c,"html.parser")
     12 
---> 13 paging = soup.find("div",{"column is-8"}).find("div",{"nav-links"}).find_all("a")
     14 start_page = paging[1].int
     15 last_page = paging[len(paging)-1].int
AttributeError: 'NoneType' object has no attribute 'find'*
from bs4 import BeautifulSoup
import requests
import pandas as pd



base_url = 'https://www.danas.rs/tag/izbori-2020/'
r = requests.get(base_url)
c = r.text

soup = BeautifulSoup(c,"html.parser")
    
paging = soup.find("div",{"column is-8"}).find("div",{"nav-links"}).find_all("a")
start_page = 1
last_page = int(paging[1].text)
web_content_list = []

for page_number in range(int(start_page),int(last_page) + 1):
    
    url = base_url+ 'page/' + str(page_number) #<-- fixed this
    r = requests.get(url)
    c = r.text
    soup = BeautifulSoup(c,"html.parser")
    
    if r.status_code == 200:
        soup = BeautifulSoup(r.content, 'html.parser')
        articles = soup.find_all('article')
        for article in articles:
            w=1
        try:
            headline = soup.find('h2', {'class': 'article-post-title'}).text.strip()
        except:
            headline = None
            
        try:
            time = soup.find('time')['datetime']
        except:
            time = None
            
        try:
            descr = soup.find('div', {'class': 'article-post-excerpt'}).text.strip()
        except:
            descr = None
           
            
        # create a list with all scraped info   <--- changed to dictionary so that you have column:value when you create the dataframe
        danas = {'headline':headline,
                        'time':time,
                        'descr':descr}
        
        web_content_list.append(danas)
        print('Collected: %s of %s' %(page_number, last_page))
            
    else:
        #print('Oh No! ' + l) #<--- what is l? 
        print('Oh No!')
        
dh = pd.DataFrame(web_content_list) #<-- need to get the full appended list, not the danas, as thats overwritten after each iteration
dh.head()
print(dh.head().to_string())
                                                                     headline                       time                                                                                                                                                                                                                                                                                                                                                                                           descr
0                             Vučić saopštava ime mandatara vlade u 20 časova  2020-10-05T09:00:05+02:00                                                                                                                                   Predsednik Aleksandar Vučić  će u danas, nakon sastanka Predsedništva Srpske napredne stranke (SNS) saopštiti ime mandatara za sastav nove Vlade Srbije. Vučić će odluku saopštiti u 20 sati u Palati Srbija, rečeno je FoNetu u kabinetu predsednika Srbije.
1                                                 Nova skupština i nova vlada  2020-08-01T14:00:13+02:00                                                                                                                                                                        Saša Radulović biće poslanik još nekoliko dana i prvi je objavio da se vrši dezinfekcija skupštinskih prostorija, što govori u prilog tome da će se novi saziv, izabran 21. juna, ipak zakleti u Domu Narodne skupštine.
2      Brnabić o novom mandatu: To ne zavisi od mene, SNS ima dobre kandidate  2020-07-15T18:59:43+02:00                                                                                                                                                                                                                                                                              Premijerka Ana Brnabić izjavila je danas da ne zavisi od nje da li će i u novom mandatu biti na čelu Vlade Srbije.
3        Državna izborna komisija objavila prve rezultate, HDZ ubedljivo vodi  2020-07-05T21:46:56+02:00                                                                                                                                                                        Državna izborna komisija (DIP) objavila je večeras prve nepotpune rezultate po kojima vladajuća Hrvatska demokratska zajednica (HDZ) osvaja čak 69 mandata, ali je reč o rezultatima na malom broju prebrojanih glasova.
4  Analiza Pravnog tima liste „Šabac je naš“: Ozbiljni dokazi za krađu izbora  2020-07-02T10:53:57+02:00  Na osnovu izjave 123 birača, od kojih je 121 potpisana i sa matičnim brojem, prikupljenim u roku od 96 sati nakon zatvaranja biračkih mesta u nedelju 21. 6. 2020. godine u 20 časova, uočena su 263 kršenja propisa na 55 biračkih mesta, navodi se na početku Analize koju je o kršenju izbornih pravila 21. juna i uoči izbora sačinio pravni tim liste „Nebojša Zelenović – Šabac je naš“.
*AttributeError回溯(最近一次调用)
在里面
11 soup=BeautifulSoup(c,“html.parser”)
12
--->13 paging=soup.find(“div”,{“column is-8”})。find(“div”,{“nav links”})。find_all(“a”)
14开始页面=分页[1]。int
15最后一页=分页[len(分页)-1].int
AttributeError:“非类型”对象没有属性“查找”*

一个问题是
'https://www.danas.rs/tag/izbori-2020/page/“
根据初始请求返回
Greška 404:Tražena stranica nije pronađena.
。所以我们需要解决这个问题

第二个问题是拉入起始页和结束页。只是好奇,你为什么要搜索起始页?所有页面从1开始

另一个问题,为什么要转换为float,然后是int。只需将页面转换为int即可

第三,您从不声明变量
date

第四,你只抓到了页面上的第一篇文章。这就是你想要的吗?或者你想要页面上的所有文章?我保留了您的代码,因为您的问题是指遍历页面

第五,如果你想要文章的全文,你需要找到每一篇文章的链接

代码也没有什么问题。我试着发表评论以便你能看到。因此,请将此代码与您的代码进行比较,如果您有问题,请告诉我:

代码:

*AttributeError                            Traceback (most recent call last)
<ipython-input-10-1c9e3a7e6f48> in <module>
     11 soup = BeautifulSoup(c,"html.parser")
     12 
---> 13 paging = soup.find("div",{"column is-8"}).find("div",{"nav-links"}).find_all("a")
     14 start_page = paging[1].int
     15 last_page = paging[len(paging)-1].int
AttributeError: 'NoneType' object has no attribute 'find'*
from bs4 import BeautifulSoup
import requests
import pandas as pd



base_url = 'https://www.danas.rs/tag/izbori-2020/'
r = requests.get(base_url)
c = r.text

soup = BeautifulSoup(c,"html.parser")
    
paging = soup.find("div",{"column is-8"}).find("div",{"nav-links"}).find_all("a")
start_page = 1
last_page = int(paging[1].text)
web_content_list = []

for page_number in range(int(start_page),int(last_page) + 1):
    
    url = base_url+ 'page/' + str(page_number) #<-- fixed this
    r = requests.get(url)
    c = r.text
    soup = BeautifulSoup(c,"html.parser")
    
    if r.status_code == 200:
        soup = BeautifulSoup(r.content, 'html.parser')
        articles = soup.find_all('article')
        for article in articles:
            w=1
        try:
            headline = soup.find('h2', {'class': 'article-post-title'}).text.strip()
        except:
            headline = None
            
        try:
            time = soup.find('time')['datetime']
        except:
            time = None
            
        try:
            descr = soup.find('div', {'class': 'article-post-excerpt'}).text.strip()
        except:
            descr = None
           
            
        # create a list with all scraped info   <--- changed to dictionary so that you have column:value when you create the dataframe
        danas = {'headline':headline,
                        'time':time,
                        'descr':descr}
        
        web_content_list.append(danas)
        print('Collected: %s of %s' %(page_number, last_page))
            
    else:
        #print('Oh No! ' + l) #<--- what is l? 
        print('Oh No!')
        
dh = pd.DataFrame(web_content_list) #<-- need to get the full appended list, not the danas, as thats overwritten after each iteration
dh.head()
print(dh.head().to_string())
                                                                     headline                       time                                                                                                                                                                                                                                                                                                                                                                                           descr
0                             Vučić saopštava ime mandatara vlade u 20 časova  2020-10-05T09:00:05+02:00                                                                                                                                   Predsednik Aleksandar Vučić  će u danas, nakon sastanka Predsedništva Srpske napredne stranke (SNS) saopštiti ime mandatara za sastav nove Vlade Srbije. Vučić će odluku saopštiti u 20 sati u Palati Srbija, rečeno je FoNetu u kabinetu predsednika Srbije.
1                                                 Nova skupština i nova vlada  2020-08-01T14:00:13+02:00                                                                                                                                                                        Saša Radulović biće poslanik još nekoliko dana i prvi je objavio da se vrši dezinfekcija skupštinskih prostorija, što govori u prilog tome da će se novi saziv, izabran 21. juna, ipak zakleti u Domu Narodne skupštine.
2      Brnabić o novom mandatu: To ne zavisi od mene, SNS ima dobre kandidate  2020-07-15T18:59:43+02:00                                                                                                                                                                                                                                                                              Premijerka Ana Brnabić izjavila je danas da ne zavisi od nje da li će i u novom mandatu biti na čelu Vlade Srbije.
3        Državna izborna komisija objavila prve rezultate, HDZ ubedljivo vodi  2020-07-05T21:46:56+02:00                                                                                                                                                                        Državna izborna komisija (DIP) objavila je večeras prve nepotpune rezultate po kojima vladajuća Hrvatska demokratska zajednica (HDZ) osvaja čak 69 mandata, ali je reč o rezultatima na malom broju prebrojanih glasova.
4  Analiza Pravnog tima liste „Šabac je naš“: Ozbiljni dokazi za krađu izbora  2020-07-02T10:53:57+02:00  Na osnovu izjave 123 birača, od kojih je 121 potpisana i sa matičnim brojem, prikupljenim u roku od 96 sati nakon zatvaranja biračkih mesta u nedelju 21. 6. 2020. godine u 20 časova, uočena su 263 kršenja propisa na 55 biračkih mesta, navodi se na početku Analize koju je o kršenju izbornih pravila 21. juna i uoči izbora sačinio pravni tim liste „Nebojša Zelenović – Šabac je naš“.

你想得到每页上的所有文章吗?