所以我写了这个简短的脚本(正确的单词?)从explosm.net漫画下载漫画图像,因为我有点-最近发现了它,我想......把它放在我的iPhone 3G ...。

它工作正常和所有。 urllib2的用于获取用于image.retrieve网页的HTML和的urllib()

为什么我张贴这对SO:我怎么优化代码?将正则表达式(正则表达式)使其更快?它是一个互联网的限制?可怜的算法...?

在速度的任何改进或 一般的代码美学 将不胜感激 “回答”。

谢谢。

-------------------------------- CODE ----------- -----------------------

import urllib, urllib2

def LinkConvert(string_link):
    for eachLetter in string_link:
        if eachLetter == " ":
            string_link = string_link[:string_link.find(eachLetter)] + "%20" + string_link[string_link.find(eachLetter)+1:]
    return string_link

start = 82
end = 1506

matchingStart = """<img alt="Cyanide and Happiness, a daily webcomic" src="http://www.explosm.net/db/files/Comics/"""
matchingEnd = """></"""
link = "http://www.explosm.net/comics/"

for pageNum in range(start,start+7):
    req = urllib2.Request(link+`pageNum`)
    response = urllib2.urlopen(req)
    page = response.read()

    istart1 = page.find(matchingStart)
    iend1 = page.find(matchingEnd, istart1)
    newString1 = page[istart1 : iend1]

    istart2 = newString1.find("src=")+4
    iend2 = len(newString1)
    final = newString1[istart2 +1 : iend2 -1]

    final = LinkConvert(final)
    try:
        image = urllib.URLopener()
        image.retrieve(final, `pageNum` + ".jpg")
    except:
        print "Uh-oh! " + `pageNum` + " was not downloaded!"

    print `pageNum` + " completed..."

顺便说一句,这是Python 2.5的代码,而不是3.0,不过请放心我了Python 3.0的所有功能,极大地研究,并与发挥各地之前或新年(后右学院应用后 - YAY ^! - ^)

有帮助吗?

解决方案

我会建议使用 Scrapy 为您的网页抓取和的用于解析美味的汤。这将使你的代码变得简单许多。

无论你想改变你现有的代码,它致力于这些选择是由你。如果没有,那么正则表达式可能会有所简化代码。我不知道它会对性能产生什么影响。

其他提示

refactormycode 可以是更合适的网站为这些“让我们提高此代码”类型的讨论。

我建议使用 BeautifulSoup 做解析,它会simplifly你的代码了很多

但既然你已经得到它以这种方式工作,也许你就不会想要去触摸它,直到它打破(页面格式的转换)。

的urllib2使用阻塞调用,这是出于性能的主要原因。 您应该使用非阻塞库(如scrapy),或者使用多个线程进行检索。我从来没有使用scrapy(所以我不能在该选项告诉),但是在Python线程是非常容易和简单。

做了同样的使用今天击。它的真正基础,但工作得很好。

我首先创建两个目录,其中我把文件:

mkdir -p html/archived
mkdir png

接着,曾与两个步骤。首先,浏览所有页面:

START=15
END=4783
for ((i=START;i<=END;i++)); do
  echo $i
  wget http://explosm.net/comics/$i/ -O html/$i.html
done

#Remove 404
find html -name '*.html' -size 0 -print0 | xargs -0 rm

第二,对于每个页面,报废htmlm和检索图象:

#!/bin/bash
for filename in ./html/*.html; do
  i=`echo $filename | cut -d '"' -f 4 | cut -d '/' -f3 | cut -d '.' -f1`
  echo "$filename => $i"
  wget -c "$(grep '<meta property="og:image" content=' ${filename} | cut -d '"' -f 4)" -O ./png/${i}.png
  mv $filename ./html/archived/
done

结果是在这里: Cyanide_and_happiness__up_to_2017-11-24.zip

请注意,我并没有在意潜在故障,但计算4606页的文件,似乎主要是OK。

我也被保存的一切,PNG。他们可能JPG,我发现185 0大小的文件,但是......随意去关心它,我只是不会:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top