Соскоб "Следующие страницы" BeautifulSoup или Scrapy? - PullRequest
0 голосов
/ 02 июня 2018

Я работаю над своим первым реальным проектом.Я пытаюсь собрать все новости игрока nfl из новостной ленты rotoworld :

Мне удалось получить всю информацию, которую я хочу, с первой страницы, используя bs4 из BeautifulSoup, но я ищув том, как получить доступ к информации из «старых» вкладок.Я думаю, что было бы легко сделать это, если бы URL менялся каждый раз, когда открывалась новая страница, но это не так.Мне было интересно, если у кого-нибудь есть какие-либо советы по очистке "следующих страниц" с BS, или я должен попробовать такую ​​программу, как Scrappy?

Я использую Python 3. Вот мой код для тех, кто заинтересован.

    from urllib.request import urlopen as uReq
    from bs4 import BeautifulSoup as soup

    my_url="http://www.rotoworld.com/playernews/nfl/football/"

    # opening up connection, grabing the page 
    uClient = uReq(my_url)
    page_html = uClient.read()
    uClient.close()

    #html parsing
    page_soup = soup(page_html, "html.parser")

    #grabs each news report

    containers = page_soup.findAll("div",{"class":"pb"})

    filename = "nfl_player_news.csv"
    f = open(filename, "w")

    headers = "Player, Position, Team, Report, More Info, date\n"

    f.write("")

    for container in containers:
        ugly_player_info = container.div.div.text.strip("\r\n")
        neat_player_info = " ".join(ugly_player_info.split())
        player = container.div.div.a.text
        position = " ".join(neat_player_info.split()[3:4])
        team = " ".join(neat_player_info.split()[5:])

        report = container.p.text.strip()

        more_info = container.findAll("div",{"class":"impact"})
        info = more_info[0].text.strip()

        date_messy = container.findAll("div",{"class":"date"})
        date_time = date_messy[0].text.strip()
        ny_date= " ".join(date_time.split()[0:2])
        date = ny_date + " 2018"

        print("player" + player) 
        print("position" + position) 
        print("team" + team) 
        print("report" + report) 
        print("info" + info) 
        print("date" + date) 

        f.write(player + "," + position + "," + team + "," + report.replace(",", "|") + "," + info.replace(",","|") + "," + date + "\n")

    f.close()

1 Ответ

0 голосов
/ 05 июня 2018

Как правило, для таких проблем вы хотели бы взглянуть на одну из двух альтернатив.

  1. Использование Selenium , чтобы открыть страницу и нажимать на "старую" кнопку каждыйвремя и получить новую страницу.
  2. Проверьте страницу и перейдите на вкладку сети.Теперь нажмите на «более старую» кнопку, и вы - в вашем случае - на пост-вызов, в ответ на который старая страница возвращается в виде HTML.Затем вы можете разобрать его.

Кроме того, вы можете использовать Scrapy, чтобы получить много кода и заранее ускорить разработку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...