Я работаю над скребком, используя Mechanize и Beautiful Soup в Python, и по некоторым причинам перенаправления не работают.Вот мой код (я прошу прощения за присвоение имен моим переменным "вещь" и "материал"; я обычно не делаю этого, поверьте мне):
stuff = soup.find('div', attrs={'class' : 'paging'}).ul.findAll('a', href=True)
for thing in stuff:
pageUrl = thing['href']
print pageUrl
req = mechanize.Request(pageUrl)
response = browser.open(req)
searchPage = response.read()
soup = BeautifulSoup(searchPage)
soupString = soup.prettify()
print soupString
В любом случае, продукты на веб-сайте Kraft имеют более одногостраница результатов поиска отображает ссылку для перехода на следующую страницу.Например, в исходном коде this указана следующая страница для линейки соусов и маринадов Kraft, которая перенаправляет на this
В любом случае, thing['href']
имеетстарая ссылка в нем, потому что она очищает веб-страницу для него;можно было бы подумать, что выполнение browser.open()
по этой ссылке заставит механизму перейти на новую ссылку и вернуть его в качестве ответа.Однако выполнение кода дает такой результат:
http://www.kraftrecipes.com/products/pages/productinfosearchresults.aspx?catalogtype=1&brandid=1&searchtext=a.1. steak sauces and marinades&pageno=2
Traceback (most recent call last):
File "C:\Development\eclipse\mobile development\Crawler\src\Kraft.py", line 58, in <module>
response = browser.open(req)
File "build\bdist.win-amd64\egg\mechanize\_mechanize.py", line 203, in open
File "build\bdist.win-amd64\egg\mechanize\_mechanize.py", line 255, in _mech_open
mechanize._response.httperror_seek_wrapper: HTTP Error 408: Request Time-out
Я получаю тайм-аут;Я думаю, это потому, что по какой-то причине Mechanize ищет старый URL-адрес и не перенаправляется на новый (я также пробовал это с urllib2 и получил тот же результат).Что здесь происходит?
Спасибо за помощь и дайте мне знать, если вам нужна дополнительная информация.
Обновление: Хорошо, я включил ведение журнала;теперь мой код выглядит так:
req = mechanize.Request(pageUrl)
print logging.INFO
Когда я запускаю его, я получаю следующее:
Аргумент url не является URI (содержит недопустимые символы) u 'http://www.kraftrecipes.com/products/pages/productinfosearchresults.aspx?catalogtype=1&brandid=1&searchtext=a.1. соусы и маринады для стейков & pageno = 2'20
Обновление 2 (которое произошло во время написания первого обновления): оказывается, это были пробелы в моей строке!Все, что мне нужно было сделать, это: pageUrl = thing['href'].replace(' ', "+")
, и это прекрасно работает.