Как я могу получить ссылки PDF с веб-сайта с помощью скрипта Python - PullRequest
2 голосов
/ 03 июня 2011

Довольно часто мне приходится скачивать PDF-файлы с веб-сайтов, но иногда их нет на одной странице.Они разделили ссылки в разбивке по страницам, и я должен нажимать на каждую страницу, чтобы получить ссылки.

Я изучаю Python и хочу написать какой-нибудь скрипт, в который я могу поместить weburl, и он извлекает ссылки PDF изэтот веб-сайт.

Я новичок в Python, так что может кто-нибудь, пожалуйста, дайте мне указания, как я могу это сделать

Ответы [ 3 ]

7 голосов
/ 03 июня 2011

Довольно просто с urllib2, urlparse и lxml. Я более подробно комментировал вещи, так как вы новичок в Python:

# modules we're using (you'll need to download lxml)
import lxml.html, urllib2, urlparse

# the url of the page you want to scrape
base_url = 'http://www.renderx.com/demos/examples.html'

# fetch the page
res = urllib2.urlopen(base_url)

# parse the response into an xml tree
tree = lxml.html.fromstring(res.read())

# construct a namespace dictionary to pass to the xpath() call
# this lets us use regular expressions in the xpath
ns = {'re': 'http://exslt.org/regular-expressions'}

# iterate over all <a> tags whose href ends in ".pdf" (case-insensitive)
for node in tree.xpath('//a[re:test(@href, "\.pdf$", "i")]', namespaces=ns):

    # print the href, joining it to the base_url
    print urlparse.urljoin(base_url, node.attrib['href'])

Результат:

http://www.renderx.com/files/demos/examples/Fund.pdf
http://www.renderx.com/files/demos/examples/FundII.pdf
http://www.renderx.com/files/demos/examples/FundIII.pdf
...
0 голосов
/ 04 июня 2017

По телефону возможно не очень читабельно

Если вы собираетесь собирать вещи с веб-сайта, которые являются статическими страницами или другими вещами. Вы можете легко получить HTML по запросам

import requests
page_content=requests.get(url)

Но если вы захватите такие вещи, как какой-нибудь коммуникационный сайт. Будут некоторые способы борьбы с захватом (как сломать эти шумные вещи будет проблемой)

  • Первый способ: сделайте ваши запросы более похожими на браузер (человека). добавить заголовки (вы можете использовать инструменты разработчика Chrome или Fiddle для копирования заголовков) сделать правильную форму публикации. Это следует скопировать способы отправки формы через браузер. получить куки и добавить его в запросы

  • Второй способ. используйте селен и драйвер браузера. Selenium будет использовать настоящий драйвер браузера (как и я, я использую chromedriver) Помните, чтобы добавить chromedriver к пути Или используйте код для загрузки драйвера.exe Водитель = WebDriver.Chrome (путь) не уверен, что этот код настройки

    driver.get (URL) Он полностью просматривает URL через браузер, поэтому он уменьшит сложность захвата вещей

    получить веб-страницу страница = driver.page_soruces

    на некоторых сайтах будет прыгать несколько страниц. Это приведет к некоторой ошибке. Заставьте свой веб-сайт подождать, пока не появится какой-то определенный элемент.

    попробовать: certain_element = ExpectedConditions.presenceOfElementLocated (By.id, 'youKnowThereIsAElement'sID) WebDriverWait (certain_element)

    или используйте имплицитное ожидание: дождитесь нужного вам времени

driver.manage (). Timeouts (). НеявноWait (5, TimeUnit.SECONDS)

И вы можете контролировать веб-сайт с помощью WebDriver. Здесь описывать не собираюсь. Вы можете искать модуль.

0 голосов
/ 03 июня 2011

Если страниц со ссылками много, вы можете попробовать отличную платформу - Scrapy (http://scrapy.org/).. Понять, как ее использовать, довольно просто, и вы можете скачать нужные PDF-файлы.

...