20 / 21 / 6
Регистрация: 30.06.2015
Сообщений: 431
1

Xpath and Scraping

05.04.2016, 16:37. Показов 2248. Ответов 50
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот страница
http://econpy.pythonanywhere.com/ex/001.html
хочу получить два списка,закупщик и цена, есть несколько вопросов, как получить все страницы, дополнив код, который я покажу и вопрос насчет xpath, как получился именно такой, как в коде.
Пы Сы Насколько понял знания xpath нужны, поэтому думаю изучить вот это http://www.w3schools.com/xsl/xpath_intro.asp
Python
1
2
3
4
5
6
import requests
from lxml import html
page = requests.get('http://econpy.pythonanywhere.com/ex/001.htm')
tree = html.fromstring(page.content)
buyers = tree.xpath('//div[@title="buyer-name"]/text()')
prices = tree.xpath('//span[@class="item-price"]/text()')
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.04.2016, 16:37
Ответы с готовыми решениями:

Scraping
Подскажите пожалуйста как вытащить информацию с data-phone-number <span title="Перевірений ...

Почему xpath в xpather работает как надо, а html.xpath обрезает последний элемент
Тут все ок. http://xpather.com/QdzC7iC7 Добавляю выражение для скрипта, но там обрезается...

Задача 6. Web scraping
Задача 6. Web scraping Что нужно сделать Дан несложный пример HTML-страницы: Sample Web Page. ...

Web scraping и переменные
Добрый ден, я начал изучать программирование и так как приходилось наблюдать за работой людей на...

Web-Scraping Python
https://sbis.ru/contragents?p=contragents Есть сайт компаний, не могу понять как получить ссылку на...

50
20 / 21 / 6
Регистрация: 30.06.2015
Сообщений: 431
10.04.2016, 17:29  [ТС] 41
Author24 — интернет-сервис помощи студентам
Jabbson, alex925,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import requests
from bs4 import BeautifulSoup
url = 'http://econpy.pythonanywhere.com/ex/00'
number = 1
end = '.html'
prices = []
names = []
for i in range(5):
    r = requests.get(url+str(number)+end)
    page = BeautifulSoup(r.text, 'html.parser')
    rows = page.body.findAll('span')
    for i, row in enumerate(rows):
        prices.append(row.string)
        rows = page.body.findAll('div', attrs={'title': 'buyer-name'})
    for i, row in enumerate(rows):
        names.append(row.string)    
    number+=1
for name, price in zip(names, prices):
    print('{:<25}{}'.format(name, price))
with open('price.txt','w') as f:
    for i in names:
        f.write(i)
        f.write('\n')
подскажите, пожалуйста, как в файл price.txt мне дописать рядом с именем цену? нужен цикл, чувствую это, но вот куда его приписать ума не приложу...
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
10.04.2016, 17:35 42
Извини конечно, но я с тебя фигею
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import requests
from bs4 import BeautifulSoup
 
url = 'http://econpy.pythonanywhere.com/ex/00{}.html'
prices = []
names = []
 
for i in range(1, 6):
    r = requests.get(url.format(i))
    page = BeautifulSoup(r.text, 'html.parser')
    rows = page.body.findAll('span')
    for row in rows:
        prices.append(row.string)
        rows = page.body.findAll('div', attrs={'title': 'buyer-name'})
    for row in rows:
        names.append(row.string)
 
with open('price.txt', 'w') as out:
    for name, price in zip(names, prices):
        out.write('{:<25}{}\n'.format(name, price))
0
20 / 21 / 6
Регистрация: 30.06.2015
Сообщений: 431
10.04.2016, 17:41  [ТС] 43
alex925, Даже путь в тысячу ли начинается с первого шага.

Добавлено через 2 минуты
тем более до этого я толком и не имел опыта ни с zip, ни с format.
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
10.04.2016, 17:44 44
izuchaju_python, ты или совсем не понимаешь, что делаешь или просто прикалываешься. У тебя в строке 19 написано именно то, что ты хочешь сделать, а ты спрашиваешь как это сделать....

Цитата Сообщение от izuchaju_python Посмотреть сообщение
тем более до этого я толком и не имел опыта ни с zip, ни с format.
Я все понимаю, но ничего тебе не мешает окрылять интернет или книгу и прочесть, что делают эти функции. У Лутца и первая и вторая функции объясняются.
0
20 / 21 / 6
Регистрация: 30.06.2015
Сообщений: 431
10.04.2016, 18:17  [ТС] 45
alex925, согласен, буду еще больше гуглить и листать учебник перед вопросом.
P.S.С xlwt пока ничего толком не получилось..пока что..."ws.write(2, 0, 'вторая ячейка нулевого столбца')", такое записывается, а как это циклом...чтобы получить результат...ладно, пойду почитаю документацию...
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
10.04.2016, 18:37 46
izuchaju_python, да в этом вопросе тебе не надо было гуглить. Еще раз говорю, то, что тебе было нужно уже находилось в твоем коде в 19 строке, тебе нужно было только поменять 2 строки местами.

Изменения, которые я внес в код, просто делают его немного более культурным.
0
20 / 21 / 6
Регистрация: 30.06.2015
Сообщений: 431
10.04.2016, 18:56  [ТС] 47
alex925, help me, ни документация (http://xlwt.readthedocs.org/en/latest/api.html) , ни высшие силы не могут мне дать понять xlwt ,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import xlwt
wb = xlwt.Workbook()
ws = wb.add_sheet('результат')
 
ws.write(0, 0, 'нулевая ячейка')
ws.write(1, 0, 'первая ячейка нулевого столбца')
ws.write(2, 0, 'вторая ячейка нулевого столбца')
ws.write(0, 1, "нулевая ячейка первого столбца")
 
#a = 1
#v = 0
#g = 0
#while a != 30:
    #ws.write(v,g,a)
    #v+=1
    #a+=3
    
    
# с 10 по 16 столбец думал циклом в иксель загнать цифры, но получил это
#ValueError("row index was %r, not allowed by .xls format" % rowx)
 
 
 
wb.save('prices.xls')
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
10.04.2016, 20:54 48
izuchaju_python, Я таким макаром не создавал документы. Я создавал документы с помощью html разметки. Там делаешь страницу в определенном формате и у документа делаешь расширение не html, а xls.
В итоге любой офис открывает этот документ как ты ожидаешь.

С этим пакетом тебе Jabbson может помочь думаю, он с ним работал или игрался.
0
Эксперт по компьютерным сетям
5898 / 3355 / 1035
Регистрация: 03.11.2009
Сообщений: 10,003
10.04.2016, 21:39 49
Лучший ответ Сообщение было отмечено izuchaju_python как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import requests
from bs4 import BeautifulSoup
import xlwt
 
url = 'http://econpy.pythonanywhere.com/ex/00{}.html'
 
names = []
prices = []
 
for i in range(1, 6):
    r = requests.get(url.format(i))
    page = BeautifulSoup(r.text, 'html.parser')
    names.extend(x.string for x in page.body.findAll('div', attrs={'title': 'buyer-name'}))
    prices.extend(x.string for x in page.body.findAll('span'))
 
 
wb = xlwt.Workbook()
ws = wb.add_sheet('результат')
 
for i, (name, price) in enumerate(zip(names, prices)):
    ws.write(i, 0, name)
    ws.write(i, 1, price)
 
wb.save('prices.xls')
0
20 / 21 / 6
Регистрация: 30.06.2015
Сообщений: 431
10.04.2016, 21:47  [ТС] 50
alex925, а можете подробнее о вашем методе рассказать?

Добавлено через 2 минуты
Jabbson, спасибо, разберу ваш код, xlwt выглядет довольно простой...а почему вот это не сработало у меня, подскажите, пожалуйста..
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import xlwt
wb = xlwt.Workbook()
ws = wb.add_sheet('результат')
 
ws.write(0, 0, 'нулевая ячейка')
ws.write(1, 0, 'первая ячейка нулевого столбца')
ws.write(2, 0, 'вторая ячейка нулевого столбца')
ws.write(0, 1, "нулевая ячейка первого столбца")
 
#a = 1
#v = 0
#g = 0
#while a != 30:
    #ws.write(v,g,a)
    #v+=1
    #a+=3
    
    
# с 10 по 16 столбец думал циклом в иксель загнать цифры, но получил это
#ValueError("row index was %r, not allowed by .xls format" % rowx)
 
 
 
wb.save('prices.xls')
10-16 столбец.
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
10.04.2016, 21:57 51
Цитата Сообщение от izuchaju_python Посмотреть сообщение
а можете подробнее о вашем методе рассказать?
- создаешь в офисе документ в нужном тебе формате
- потом сохраняешь его как html
- открываешь файл в браузере и смотришь места, которые хочешь изменить
- затем удаляешь шаблонные данные (которые ты вбил при создании документа) и с помощью шаблонизатора оформляешь все в виде шаблона (jinja2), который будет заполнять все отправленными туда данными

Ну и все, автогенерилка документов есть. Я таким образом создавал doc. Заказчик просто хотел получать отчеты в doc.
0
10.04.2016, 21:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2016, 21:57
Помогаю со студенческими работами здесь

WEB-Scraping Интернет-магазина
Добрый день, дорогие форумчане! Начинаю изучать Python, поэтому буду благодарен вам за любую...

HtmlUnit financial website web scraping
Нужна помощь с вытаскиванием таблицы из сайта:...

Выбор django или Scraping + Data Mining
Здравствуйте. Усилено изучаю пайтон. Прошел момент практического выбора чем именно заняться, из...

Web scraping - извлечение данных с web-страницы
Добрый день всем! помогите написать скрипт который будет извлекать email, телефоный номер и...

XPATH
имеется файл эксемель, нормальный ручной прописанный самим собой без тип аслеш дабл слеш хететепе и...

xPath
xPath используется только с движком парсинга или каким то ещё образом?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
51
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru