У меня немного затруднительное положение.
URL-адрес в формате: https://www.example.com/blahblah/moreblah.php?x=123456789&lang=en
Как видите, в запросе есть уникальный идентификатор (в данном примере UID = 123456789).Скрипт, который я написал, извлечет всю необходимую информацию для страницы, где x = 123456789. Я также поместил скрипт в цикл, и он увеличил количество UID на единицу (см. Ниже).Только около 4% всех UID имеют данные, но у меня нет способа определить, какие UID содержат данные (я попытался сгенерировать карту сайта xml без особой удачи - продолжайте получать «site not indexable»)).
Существующий код работает, проблема в том, что этот метод займет слишком много времени.Я быстро подсчитал, и (теоретически) потребуются годы, чтобы проверить каждый из UID от 0 до 54 миллионов (я исследовал сайт и нашел до 53 миллионов UID).
На мой взгляд, есть несколько вариантов: 1. Многопоточность / пул (не знаю, как это сделать).Кроме того, как указан цикл ниже, один цикл должен завершиться, чтобы uid увеличился на 1, прежде чем можно будет выполнить следующий запрос (см. Строку 20).
2. Найдите способ сканирования сайта и точно идентифицируйтекакие идентификаторы нужно удалить, а затем ограничить цикл этими точными идентификаторами.
Я открыт и для других предложений.
import urllib2
from bs4 import BeautifulSoup
proxy = urllib2.ProxyHandler({'https': xxx.xx.xxx.xxx:xxxx})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
uid = 0
def scrape (uid):
while uid < 54000000:
page = urllib2.urlopen("https://www.example.com/blahblah/moreblah.php?x={}&lang=en".format(str(uid)))
soup = BeautifulSoup(page, 'html.parser')
x = soup.find_all('div', id="container")
x_string = str(x)
try:
parsing the x_string
except:
print "There is no data on this page"
uid+=1
scrape(uid)