Нужно очистить данные с помощью BeautifulSoup - PullRequest
0 голосов
/ 13 ноября 2018

Мне нужно получить сведения о знаменитостях из https://www.astrotheme.com/celestar/horoscope_celebrity_search_by_filters.php Входные данные: время рождения, известное только за исключением мировых событий в профессии, где у меня около 22 822 знаменитостей.Я могу получить данные первой страницы, используя urllib2 и bs4

import re
import urllib2
from bs4 import BeautifulSoup

url = "https://www.astrotheme.com/celestar/horoscope_celebrity_search_by_filters.php"
data = "sexe=M|F&categorie[0]=0|1|2|3|4|5|6|7|8|9|10|11|12&connue=1&pays=-1&tri=0&x=33&y=13"

fp = urllib2.urlopen(url, data)
soup = BeautifulSoup(fp, 'html.parser')
from_div = soup.find_all('div', attrs={'class': 'titreFiche'})

for major in from_div:
    name = re.findall(r'portrait">(.*?)<br/>', str(major))
    link = re.findall(r'<a href="(.*?)"', str(major))
    print name[0], link[0]

. Для следующих 230 страниц я не могу получить данные.Я использовал, чтобы изменить URL как страницу, равную до конца, но я не могу очистить.Есть ли способ получить оставшиеся данные с этой страницы?

1 Ответ

0 голосов
/ 13 ноября 2018

вам нужны сессионные куки, используйте requests, чтобы легко сохранить сессию

from bs4 import BeautifulSoup
import requests, re

url = "https://www.astrotheme.com/celestar/horoscope_celebrity_search_by_filters.php"
searchData = {
  "sexe": "M|F",
  "categorie[0]": "0|1|2|3|4|5|6|7|8|9|10|11|12",
  "connue": 1, "pays": -1, "tri": 0, "x": 33, "y": 13
}
session = requests.session()

def doSearch(url, data=None):
  if data:
    fp = session.post(url, data=data).text
  else:
    fp = session.get(url).text
  soup = BeautifulSoup(fp, 'html.parser')
  from_div = soup.find_all('div', attrs={'class': 'titreFiche'})

  for major in from_div:
      name = re.findall(r'portrait">(.*?)<br/>', str(major))
      link = re.findall(r'<a href="(.*?)"', str(major))
      print name[0], link[0]

# do Post search in first request
doSearch(url, searchData)

# we have session and we can use Get request for next page
for index in range(2, 4): # get page 2 to 3
  print('getting page: %s' % index)
  pageurl = '%s?page=%s' % (url, index)
  print(pageurl)
  doSearch(pageurl)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...