>source

아래 code로 시도했는데 code가 하는 일은 첫 페이지를 가져오고 영화에 대한 리뷰를 완전히 로드하지 않는 것입니다. 나는 모든 영화 제목, 영화 날짜 및 리뷰를 얻는 데 관심이 있습니다.

enter code here
from bs4 import BeautifulSoup
import requests
url= 'https://www.nollywoodreinvented.com/list-of-all-reviews'
headers= {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:55.0) Gecko/20100101 Firefox/55.0',
req= requests.get(url,  headers=headers)
soup= BeautifulSoup(req.text, 'lxml')
movie_div= soup.find_all('div', class_='article-panel')
title=[]
for div in movie_div:
    images= div.find_all('div', class_='article-image-wrapper')
    for image in images:
        image= image.find_all('div', class_='article-image')
        for img in image:
            title.append(img.a.img['title'])
date=[]
for div in movie_div:
    date.append(div.find('div', class_='authorship type-date').text.strip())
info=[]
for div in movie_div:
    info.append(div.find('div', class_='excerpt-text').text.strip())
import pandas as pd
movie= pd.DataFrame({'title':title, 'date':date, 'info':info}, index=None)
movie.head()

  • 답변 # 1

    스크레이핑 중인 HTML을 제공하는 백엔드 API가 있습니다. 브라우저 개발자 도구 -네트워크 탭 -가져오기/Xhr를 열고 두 번째 또는 세 번째 페이지 링크를 클릭하면 작동 중인 것을 볼 수 있습니다. 아래와 같이 python을 사용하여 POST 요청을 다시 작성하십시오.

    import requests
    from bs4 import BeautifulSoup
    import pandas as pd
    from datetime import datetime
    pages= 3
    results_per_page= 500 #max 500 I think
    headers=   {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'}
    url= 'https://www.nollywoodreinvented.com/wp-admin/admin-ajax.php'
    output= []
    for page in range(1,pages+1):
        payload= {
            'action':'itajax-sort',
            'view':'grid',
            'loop':'main loop',
            'location':'',
            'thumbnail':'1',
            'rating':'1',
            'meta':'1',
            'award':'1',
            'badge':'1',
            'authorship':'1',
            'icon':'1',
            'excerpt':'1',
            'sorter':'recent',
            'columns':'4',
            'layout':'full',
            'numarticles':str(results_per_page),
            'largefirst':'',
            'paginated':str(page),
            'currentquery[category__in][]':'2648',
            'currentquery[category__in][]':'2649'
            }
        resp= requests.post(url,headers=headers,data=payload).json()
        print(f'Scraping page: {page} -results: {results_per_page}')
        soup= BeautifulSoup(resp['content'],'html.parser')
        for film in soup.find_all('div',class_='article-panel'):
            try:
                title= film.find('h3').text.strip()
            except AttributeError:
                continue
            date= datetime.strptime(film.find('span',class_='date').text.strip(),"%B %d, %Y").strftime('%Y-%m-%d')
            likes= film.find('span',class_='numcount').text.strip()
            if not likes:
                likes= 0
            full_stars= [1 for _ in film.find_all('span',class_='theme-icon-star-full')]
            half_stars= [0.5 for _ in film.find_all('span',class_='theme-icon-star-half')]
            stars= (sum(full_stars)+ sum(half_stars))/2.0
            item= {
                'title':title,
                'date':date,
                'likes':likes,
                'stars':stars
            }
            output.append(item)
    df= pd.DataFrame(output)
    df.to_csv('nollywood_data.csv',index=False)
    print('Saved to nollywood_data.csv')
    

    오! 엄청난. 도와 주셔서 감사합니다. 그러나 이 code는 출력에서 ​​리뷰를 스크랩하지 않았습니다. 내 이전 code의 경우 리뷰가 스크랩되었지만 전체 리뷰가 없습니다.

    sireorator2022-02-02 15:14:39
  • 이전 html : CSS의 투명도에 대한 색상 code는 무엇입니까?
  • 다음 python : 파이썬은 목록 목록에서 항목 수를 반환합니다. [중복]