Пожалуйста, введите следующий код и опубликуйте результат.Я напишу регулярное выражение для перехвата данных, которые вы хотите получить.
Примечание: было бы проще, если бы вы опубликовали это в моем письме, и это не обременяло бы SO память
sock = urllib2.urlopen(request)
ch = sock.read()
sock.close()
print '\n'.join(str(i) + ' ' + repr(line)
for i,line in enumerate(ch.splitlines(True)))
Регулярное выражение по крайней мере в 20 раз быстрее, чем использование BeautifulSoup для анализа текста.
Я говорю "анализировать" НЕ "анализировать"
(для верующих людей)что текст HTML нельзя анализировать с помощью регулярного выражения, я говорю: ùù & ùè-_, sp * µùy43é '## {[|: ù% yy ~ é "&' [[é (+ F +" §.N / .M%% iyuo £ $$ ö !!!! sskrftttt § !!)
Редактировать 1
Если текст организован так регулярно, как кажется, вам даже не нужно регулярное выражение дляпроанализируйте его:
from io import StringIO
ss = '''<input type="hidden" name="__FOO" id="__FOO" value="garble" />
<script type="text/javascript">
//<![CDATA[
$(function () {
// convert to
var True = true, False = false;
manatee.start({
pageIDs: ["16798", "16799", "16800", "16801", "16802"],
userNames: ["Alice", "Bob", "Carol", "Dave", "Eve"],
wordCounts: [77,23,64,89,93],
linkCounts: [2,0,3,1,4],
pageUrls: ["","/blog/35318264c9a98faf79965c270ac80c5606774df1/data.pdf","/blog/da6645f6e22bf5f75974dc7eed5fcd6160d6b51e/data.pdf","/blog/6f90f101115140727c43cadee0b9e17881403a63/data.pdf","/blog/333584fc2850d1a1f97a0a7bf8c5a12e684856bf/data.pdf","/blog/9a018ecc48a37a9247a6404fd83e085384b445aa/data.pdf"],
toolbar: {
id: "ManateeToolbar",
buttons: [
{
id: "ManateeBrowser",
text: "Enter Fullscreen",
toggleText: "Escape Fullscreen"
}
]
}
});
});
//]]>
</script>
<script type="text/javascript">var blah</script>'''
simili_file = StringIO(ss)
for line in simili_file:
if line[0:13] == '\t\tpageUrls: [':
urls = tuple(el[1:-1] for el in line[13:line.find(']')].split(',') if el[1:-1])
print( urls )
результат
('/blog/35318264c9a98faf79965c270ac80c5606774df1/data.pdf',
'/blog/da6645f6e22bf5f75974dc7eed5fcd6160d6b51e/data.pdf',
'/blog/6f90f101115140727c43cadee0b9e17881403a63/data.pdf',
'/blog/333584fc2850d1a1f97a0a7bf8c5a12e684856bf/data.pdf',
'/blog/9a018ecc48a37a9247a6404fd83e085384b445aa/data.pdf')
Редактировать 2
Чтобы сделать код более безопасным относительно изменений содержимого в файле, вы также можете использоватьхотя и регулярное выражение:
ss = '''<input type="hidden" name="__FOO" id="__FOO" value="garble" />
<script type="text/javascript">
//<![CDATA[
$(function () {
// convert to
var True = true, False = false;
manatee.start({
pageIDs: ["16798", "16799", "16800", "16801", "16802"],
userNames: ["Alice", "Bob", "Carol", "Dave", "Eve"],
wordCounts: [77,23,64,89,93],
linkCounts: [2,0,3,1,4],
pageUrls: ["","/blog/35318264c9a98faf79965c270ac80c5606774df1/data.pdf","/blog/da6645f6e22bf5f75974dc7eed5fcd6160d6b51e/data.pdf","/blog/6f90f101115140727c43cadee0b9e17881403a63/data.pdf","/blog/333584fc2850d1a1f97a0a7bf8c5a12e684856bf/data.pdf","/blog/9a018ecc48a37a9247a6404fd83e085384b445aa/data.pdf"],
toolbar: {
id: "ManateeToolbar",
buttons: [
{
id: "ManateeBrowser",
text: "Enter Fullscreen",
toggleText: "Escape Fullscreen"
}
]
}
});
});
//]]>
</script>
<script type="text/javascript">var blah</script>'''
import re
regx = re.compile('^\t*pageUrls[\t ]*:[\t ]*\[(.*?)\],[\t ]*$',re.MULTILINE)
for mat in regx.finditer(ss):
urls = tuple(el[1:-1] for el in mat.group(1).split(',') if el[1:-1])
print( urls )
Для нормального функционирования двух кодов не должно быть ',' в URL.
В первом кодетакже не должно быть ']' в URL. Но япроверено: в Windows имена реперториев могут содержать ']' .
Я написал шаблон регулярного выражения для второго кода, чтобы избежать проблем из-за ',' или ']' в URL-адресах.: это с конечной частью регулярного выражения ],[\t ]*$
, которая требует, чтобы за символом ']' следовали только пробелы или символы табуляции до конца строки.Из-за звездочки '*' после [\t ]
наличие вкладок или пробелов в конце строки возможно только, но не обязательно.