<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>标点符 &#187; python</title>
	<atom:link href="http://www.biaodianfu.com/tag/python/feed" rel="self" type="application/rss+xml" />
	<link>http://www.biaodianfu.com</link>
	<description>编译自己的互联网生活</description>
	<lastBuildDate>Tue, 31 Jan 2012 01:07:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>使用Python来连接MySQL</title>
		<link>http://www.biaodianfu.com/python-mysql.html</link>
		<comments>http://www.biaodianfu.com/python-mysql.html#comments</comments>
		<pubDate>Tue, 31 Jan 2012 01:07:39 +0000</pubDate>
		<dc:creator>标点符</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.biaodianfu.com/?p=4625</guid>
		<description><![CDATA[本来以为使用Python安装MySQL是件容易的事，但是发现，不管怎样每次安装编译都不通过。强大的pip install mysql-python 不再管用。报错内容为： Traceback (most recent call last): File &#34;setup.py&#34;, line 15, in &#60;module&#62; metadata, options = get_config() File &#34;D:\MySQL-python-1.2.3\setup_windows.py&#34;, li ne 7, in get_config serverKey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, options[&#039;registry_ke y&#039;]) WindowsError: [Error 2] 在网上找了很久都没有找到解决方案，于是在QQ群里问了下，找到了一个做好的安装包，迅速的解决了此问题。 安装包下载地址：http://code.google.com/p/soemin/downloads/list 以下为一个简单的使用python向MySQL插入数据的代码，仅供参考： import MySQLdb db = MySQLdb.connect(host=&#34;localhost&#34;, user=&#34;root&#34;, passwd=&#34;root&#34;,db=&#34;slopeone&#34;) cursor = db.cursor() f = open(&#34;sample.data&#34;, &#34;r&#34;) for line in f: [...]]]></description>
			<content:encoded><![CDATA[<p>本来以为使用Python安装MySQL是件容易的事，但是发现，不管怎样每次安装编译都不通过。强大的pip install mysql-python 不再管用。报错内容为：</p>
<pre class="brush: shell; gutter: false">Traceback (most recent call last):
  File &quot;setup.py&quot;, line 15, in &lt;module&gt;
    metadata, options = get_config()
  File &quot;D:\MySQL-python-1.2.3\setup_windows.py&quot;, li
ne 7, in get_config
    serverKey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, options[&#039;registry_ke
y&#039;])
WindowsError: [Error 2]</pre>
<p>在网上找了很久都没有找到解决方案，于是在QQ群里问了下，找到了一个做好的安装包，迅速的解决了此问题。</p>
<p>安装包下载地址：<a href="http://code.google.com/p/soemin/downloads/list">http://code.google.com/p/soemin/downloads/list</a></p>
<p>以下为一个简单的使用python向MySQL插入数据的代码，仅供参考：</p>
<pre class="brush: python; gutter: false">import MySQLdb
db = MySQLdb.connect(host=&quot;localhost&quot;, user=&quot;root&quot;, passwd=&quot;root&quot;,db=&quot;slopeone&quot;)
cursor = db.cursor()
f = open(&quot;sample.data&quot;, &quot;r&quot;)
for line in f:
    content = line.rstrip(&#039;\n&#039;).split(&quot;\t&quot;)
    user_id = content[0]
    item_id = content[1]
    rating = content[2]
    print user_id,item_id,rating
    cursor.execute(&quot;insert into oso_user_ratings values(%s,%s,%s)&quot;,(user_id,item_id,rating))
f.close()
print &quot;over!&quot;
cursor.close()</pre>
<p>Related posts:<ol>
<li><a href='http://www.biaodianfu.com/python-mssql.html' rel='bookmark' title='使用Python连接MSSQL方法'>使用Python连接MSSQL方法</a></li>
<li><a href='http://www.biaodianfu.com/dbexportdoc-for-mysql.html' rel='bookmark' title='MySQL数据库表结构导出工具'>MySQL数据库表结构导出工具</a></li>
<li><a href='http://www.biaodianfu.com/learn-python-the-hard-way-study-notes.html' rel='bookmark' title='《Learn Python The Hard Way》学习笔记'>《Learn Python The Hard Way》学习笔记</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.biaodianfu.com/python-mysql.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用Python连接MSSQL方法</title>
		<link>http://www.biaodianfu.com/python-mssql.html</link>
		<comments>http://www.biaodianfu.com/python-mssql.html#comments</comments>
		<pubDate>Sun, 29 Jan 2012 14:35:39 +0000</pubDate>
		<dc:creator>标点符</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[MSSQL]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.biaodianfu.com/?p=4618</guid>
		<description><![CDATA[由于公司目前使用的都是MS SQL Server 2008，由于一些特殊需要，要使用python来解决一些简单繁琐的SQL查询，Python本身是不支持连接MSSQL的，需要特殊的组件才行。网上找了一个pymssql的扩展，据说很好。安装这个组件花了我好长时间。下面就来看看他的安装过程，好让后面使用的人少找一些弯路。 如果直接使用pip install pymssql安装的话，会直接有问题，具体报错如下： C:\Program Files (x86)\PowerCmd&#62;pip install pymssql Downloading/unpacking pymssql   Downloading pymssql-2.0.0b1-dev-20111019.tar.gz (5.0Mb): 5.0Mb downloaded   Running setup.py egg_info for package pymssql Traceback (most recent call last):   File &#34;&#60;string&#62;&#34;, line 14, in &#60;module&#62;   File &#34;C:\Program Files (x86)\PowerCmd\build\pymssql\setup.py&#34;, line 41, in &#60;module&#62;     from Cython.Distutils import build_ext as _build_ext [...]]]></description>
			<content:encoded><![CDATA[<p>由于公司目前使用的都是MS SQL Server 2008，由于一些特殊需要，要使用python来解决一些简单繁琐的SQL查询，Python本身是不支持连接MSSQL的，需要特殊的组件才行。网上找了一个pymssql的扩展，据说很好。安装这个组件花了我好长时间。下面就来看看他的安装过程，好让后面使用的人少找一些弯路。</p>
<p>如果直接使用pip install pymssql安装的话，会直接有问题，具体报错如下：</p>
<pre class="brush: shell; gutter: true">C:\Program Files (x86)\PowerCmd&gt;pip install pymssql
Downloading/unpacking pymssql
  Downloading pymssql-2.0.0b1-dev-20111019.tar.gz (5.0Mb): 5.0Mb downloaded
  Running setup.py egg_info for package pymssql
Traceback (most recent call last):
  File &quot;&lt;string&gt;&quot;, line 14, in &lt;module&gt;
  File &quot;C:\Program Files (x86)\PowerCmd\build\pymssql\setup.py&quot;, line 41, in &lt;module&gt;
    from Cython.Distutils import build_ext as _build_ext
ImportError: No module named Cython.Distutils
    Complete output from command python setup.py egg_info:
----------------------------------------
Command python setup.py egg_info failed with error code 1
Storing complete log in C:\Users\ThinkPad\AppData\Roaming\pip\pip.log</pre>
<p>从上面的报错中发现，原来是少了Cython这个扩展。Cython其实就是一个python的C编译器。安装起来也非常的简单。只要pip install Cython 即可。中间安装的时间会比较长。安装完Cython后再次安装pymssql发现还是不成功。具体的报错内容为：</p>
<pre class="brush: shell; gutter: true">cl: 命令行 error D8021 :无效的数值参数“/Wl,-allow-multiple-definition”
error: command &#039;&quot;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\cl.exe&quot;&#039; failed with exit status 2</pre>
<p>网上找了下，发现解决这个问题方法有很多种，但是都很烦，就是因为很烦，牛肉直接做了个非常牛X的安装包。</p>
<p>安装包下载地址： <a href="http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql">http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql</a></p>
<p>安装安装完成以后我们就需要使用Python来连接数据库了，具体的连接方法官方网站上有详细的描述，这里只做一下简单的介绍：</p>
<p><a href="http://code.google.com/p/pymssql/wiki/PymssqlExamples">http://code.google.com/p/pymssql/wiki/PymssqlExamples</a></p>
<p>以下为我使用的Python语句:</p>
<pre class="brush: python; gutter: true">import pymssql
urllist = [&#039;www.baidu.com&#039;,&#039;www.google.com&#039;]
date = [&#039;2011-01-01&#039;,&#039;2012-01-02&#039;]
conn = pymssql.connect(host=&#039;localhost:1433&#039;, user=&#039;test&#039;, password=&#039;test&#039;, database=&#039;MyTestDB&#039;)
cur = conn.cursor()
for url in urllist:
    cur.execute(&quot;SELECT COUNT(DISTINCT CookieID) FROM [MyTestDB].[dbo].[VisitLog] WITH (NOLOCK) WHERE ComeDate &gt; %s AND ComeDate &lt; %s AND ReferrerDomain = %s&quot;,(date[0],date[1],url))
    for row in cur:
        print &quot;%s,%d&quot; % (url,row[0])
conn.close()</pre>
<p>Related posts:<ol>
<li><a href='http://www.biaodianfu.com/python-today-dir.html' rel='bookmark' title='Python小程序：每天一个文件夹'>Python小程序：每天一个文件夹</a></li>
<li><a href='http://www.biaodianfu.com/google-analytics-data-export-api.html' rel='bookmark' title='Google Analytic 数据导出API接口'>Google Analytic 数据导出API接口</a></li>
<li><a href='http://www.biaodianfu.com/install-scrapy-on-windows.html' rel='bookmark' title='Scrapy在Windows上的安装笔记'>Scrapy在Windows上的安装笔记</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.biaodianfu.com/python-mssql.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python小程序：每天一个文件夹</title>
		<link>http://www.biaodianfu.com/python-today-dir.html</link>
		<comments>http://www.biaodianfu.com/python-today-dir.html#comments</comments>
		<pubDate>Thu, 22 Dec 2011 10:16:48 +0000</pubDate>
		<dc:creator>标点符</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.biaodianfu.com/?p=4549</guid>
		<description><![CDATA[这个程序的功能非常的简单，就是每天在系统中新建一个文件夹。文件夹即当前的时间。此代码是在同事那边看到的，为了锻炼下自己薄弱的Python能力，所以花时间重新写了一个。具体代码如下： import time,os basePath = &#039;F:\\work\\&#039; thisYear = str(time.localtime()[0]) thisMonth = str(time.localtime()[1]) thisDay = time.strftime(&#34;%Y-%m-%d&#34;, time.localtime()) yearPath = basePath + thisYear monthPath = basePath  + thisYear + &#039;\\&#039; +thisMonth dayPath = basePath + thisYear + &#039;\\&#039; +thisMonth + &#039;\\&#039; + thisDay if not os.path.exists(yearPath):     os.mkdir(yearPath) if not os.path.exists(monthPath):     os.mkdir(monthPath) if not os.path.exists(dayPath):     [...]]]></description>
			<content:encoded><![CDATA[<p>这个程序的功能非常的简单，就是每天在系统中新建一个文件夹。文件夹即当前的时间。此代码是在同事那边看到的，为了锻炼下自己薄弱的Python能力，所以花时间重新写了一个。具体代码如下：</p>
<pre class="brush: python; gutter: true">import time,os
 basePath = &#039;F:\\work\\&#039;
 thisYear = str(time.localtime()[0])
 thisMonth = str(time.localtime()[1])
 thisDay = time.strftime(&quot;%Y-%m-%d&quot;, time.localtime())
 yearPath = basePath + thisYear
 monthPath = basePath  + thisYear + &#039;\\&#039; +thisMonth
 dayPath = basePath + thisYear + &#039;\\&#039; +thisMonth + &#039;\\&#039; + thisDay
 if not os.path.exists(yearPath):
     os.mkdir(yearPath)
 if not os.path.exists(monthPath):
     os.mkdir(monthPath)
 if not os.path.exists(dayPath):
     os.mkdir(dayPath)
 os.popen(&quot;explorer.exe&quot; + &quot; &quot; + dayPath)
 os.popen(&quot;exit&quot;)</pre>
<p>刚开始写的时候我使用的os.system()来调用windows程序，但发现每次执行是都会弹出一个python窗口，很是麻烦。问了下高人，说解决方案是把.py文件后缀改为.pyw后缀即可。但是试了下还是不行。在高人的指导下，才得知原来值需要将os.system()修改为os.popen()即可。</p>
<p>.py和.pyw有什么不同？</p>
<p>严格来说，它们之间的不同就只有一个：视窗运行它们的时候调用不同的执行档案。视窗用python.exe 运行.py ，用pythonw.exe 运行.pyw 。这纯粹是因为安装视窗版Python 时，扩展名.py 自动被登记为用python.exe 运行的文件，而.pyw 则被登记为用pythonw.exe 运行。.py 和.pyw 之间的“其它差别”全都是python.exe 和pythonw.exe 之间的差别。</p>
<p>跟 python.exe 比较起来，pythonw.exe 有以下的不同：</p>
<ol>
<li>执行时不会弹出控制台窗口（也叫 DOS 窗口）</li>
<li>所有向原有的 stdout 和 stderr 的输出都无效</li>
<li>所有从原有的 stdin 的读取都只会得到 EOF</li>
</ol>
<p>.pyw 格式是被设计来运行开发完成的纯图形界面程序的。纯图形界面程序的用户不需要看到控制台窗口。开发纯图形界面程序的时候，你可以暂时把.pyw 改成 .py ，以便运行时能调出控制台窗口，看到所有错误信息。</p>
<p>os.system()和os.popen()有什么不同？</p>
<ol>
<li>os.system(command)  在一个子shell中运行command命令，并返回command命令执行完毕后的退出状态。这实际上是使用C标准库函数system()实现的。这个函数在执行command命令时需要重新打开一个终端，并且无法保存command命令的执行结果。</li>
<li>os.popen(command,mode)  打开一个与command进程之间的管道。这个函数的返回值是一个文件对象，可以读或者写(由mode决定，mode默认是&#8217;r')。如果mode为&#8217;r'，可以使用此函数的返回值调用read()来获取command命令的执行结果。</li>
</ol>
<p>&nbsp;</p>
<p>Related posts:<ol>
<li><a href='http://www.biaodianfu.com/install-scrapy-on-windows.html' rel='bookmark' title='Scrapy在Windows上的安装笔记'>Scrapy在Windows上的安装笔记</a></li>
<li><a href='http://www.biaodianfu.com/learn-python-the-hard-way-study-notes.html' rel='bookmark' title='《Learn Python The Hard Way》学习笔记'>《Learn Python The Hard Way》学习笔记</a></li>
<li><a href='http://www.biaodianfu.com/web-log-format.html' rel='bookmark' title='WEB日志格式及分析工具'>WEB日志格式及分析工具</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.biaodianfu.com/python-today-dir.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用python将Sqlite中的数据直接输出为CVS</title>
		<link>http://www.biaodianfu.com/python-sqlite-cvs.html</link>
		<comments>http://www.biaodianfu.com/python-sqlite-cvs.html#comments</comments>
		<pubDate>Thu, 01 Dec 2011 11:02:39 +0000</pubDate>
		<dc:creator>标点符</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[SQLite]]></category>

		<guid isPermaLink="false">http://www.biaodianfu.com/?p=4506</guid>
		<description><![CDATA[对于SQLite来说，目前查看还是比较麻烦，所以就像把SQLite中的数据直接转成Excel中能查看的数据，这样也好在Excel中做进一步分数据处理或分析，如上篇文章中介绍的IP抓取的IP数据。从网上找到了一个将SQLite转成CVS的方法，贴在博客里，供需要的朋友使用： import sqlite3 import csv, codecs, cStringIO class UnicodeWriter:     """     A CSV writer which will write rows to CSV file "f",     which is encoded in the given encoding.     """     def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):         # Redirect output to a queue         self.queue = cStringIO.StringIO()         self.writer = csv.writer(self.queue, [...]]]></description>
			<content:encoded><![CDATA[<p>对于SQLite来说，目前查看还是比较麻烦，所以就像把SQLite中的数据直接转成Excel中能查看的数据，这样也好在Excel中做进一步分数据处理或分析，如上篇文章中介绍的<a title="使用python来抓取新浪的IP数据" href="http://www.biaodianfu.com/python-sina-ip.html">IP抓取的IP数据</a>。从网上找到了一个将SQLite转成CVS的方法，贴在博客里，供需要的朋友使用：</p>
<pre>import sqlite3
import csv, codecs, cStringIO
class UnicodeWriter:
    """
    A CSV writer which will write rows to CSV file "f",
    which is encoded in the given encoding.
    """</pre>
<pre>    def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
        # Redirect output to a queue
        self.queue = cStringIO.StringIO()
        self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
        self.stream = f
        self.encoder = codecs.getincrementalencoder(encoding)()</pre>
<pre>    def writerow(self, row):
        self.writer.writerow([unicode(s).encode("utf-8") for s in row])
        # Fetch UTF-8 output from the queue ...
        data = self.queue.getvalue()
        data = data.decode("utf-8")
        # ... and reencode it into the target encoding
        data = self.encoder.encode(data)
        # write to the target stream
        self.stream.write(data)
        # empty queue
        self.queue.truncate(0)</pre>
<pre>    def writerows(self, rows):
        for row in rows:
            self.writerow(row)</pre>
<pre>conn = sqlite3.connect('ipaddress.sqlite3.db')
c = conn.cursor()
c.execute('select * from ipdata')
writer = UnicodeWriter(open("export_data.csv", "wb"))
writer.writerows(c)</pre>
<p>Related posts:<ol>
<li><a href='http://www.biaodianfu.com/python-check-statistics-code.html' rel='bookmark' title='使用Python来检查统计代码是否布置到位'>使用Python来检查统计代码是否布置到位</a></li>
<li><a href='http://www.biaodianfu.com/python-sina-ip.html' rel='bookmark' title='使用python来抓取新浪的IP数据'>使用python来抓取新浪的IP数据</a></li>
<li><a href='http://www.biaodianfu.com/google-chart-api-qrcode.html' rel='bookmark' title='Google Chart API：二维码'>Google Chart API：二维码</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.biaodianfu.com/python-sqlite-cvs.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用python来抓取新浪的IP数据</title>
		<link>http://www.biaodianfu.com/python-sina-ip.html</link>
		<comments>http://www.biaodianfu.com/python-sina-ip.html#comments</comments>
		<pubDate>Thu, 01 Dec 2011 10:56:08 +0000</pubDate>
		<dc:creator>标点符</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[IP地址]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.biaodianfu.com/?p=4504</guid>
		<description><![CDATA[数据分析，特别是网站分析中需要对访问者的IP进行分析，分析IP中主要是区分来访者的省份+城市+行政区数据，考虑到目前纯真IP数据库并没有把这些数据做很好的区分，于是寻找了另外一个可行的方案（当然不是花钱买哈）。解决方案就是抓取新浪的IP数据。 新浪的IP数据接口为： http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&#38;ip=123.124.2.85 返回的数据为： {"ret":1,"start":"123.123.221.0","end":"123.124.158.29","country":"\u4e2d\u56fd","province":"\u5317\u4eac","city":"\u5317\u4eac","district":"","isp":"\u8054\u901a","type":"","desc":""} 其返回的内容中已经包含了省份+城市+行政区信息了，这就是我们真实想要的。 下面就来说说如何来抓取这部分IP数据，要抓取这部分数据的主要工作就是枚举，即将接口中的IP不断的替换，要替换所有的IP地址肯定不太可能，所以我们缩小下范围，只穷举所有中国的IP段。考虑到新浪的IP接口返回的是IP段，所以要穷举的部分又少了一部分。再考虑啊到IP段的最后一位及256个IP基本上都是在一个地区，所以我们要穷举的数据有少了很多。对于穷举最重要的是把IP地址换成INT型。 具体国内有多少IP地址段，可以到APNIC官方网站去查找或下面的文档 http://ftp.apnic.net/apnic/dbase/data/country-ipv4.lst 下面就来看看穷举程序如何写： import re def ipv3_to_int(s):     l = [int(i) for i in s.split('.')]     return  (l[0] &#60;&#60; 16) &#124; (l[1] &#60;&#60; 8) &#124; l[2] def int_to_ipv3(s):     ip1 = s &#62;&#62; 16 &#38; 0xFF     ip2 = s &#62;&#62; 8 &#38; 0xFF     ip3 = s [...]]]></description>
			<content:encoded><![CDATA[<p>数据分析，特别是网站分析中需要对访问者的IP进行分析，分析IP中主要是区分来访者的省份+城市+行政区数据，考虑到目前<a href="http://www.biaodianfu.com/qqwry-format-detail.html">纯真IP数据库</a>并没有把这些数据做很好的区分，于是寻找了另外一个可行的方案（当然不是花钱买哈）。解决方案就是抓取<a href="http://www.biaodianfu.com/qq-ip-addres.html">新浪的IP数据</a>。</p>
<p>新浪的IP数据接口为：</p>
<pre>http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&amp;ip=123.124.2.85</pre>
<p>返回的数据为：</p>
<pre>{"ret":1,"start":"123.123.221.0","end":"123.124.158.29","country":"\u4e2d\u56fd","province":"\u5317\u4eac","city":"\u5317\u4eac","district":"","isp":"\u8054\u901a","type":"","desc":""}</pre>
<p>其返回的内容中已经包含了省份+城市+行政区信息了，这就是我们真实想要的。</p>
<p>下面就来说说如何来抓取这部分IP数据，要抓取这部分数据的主要工作就是枚举，即将接口中的IP不断的替换，要替换所有的IP地址肯定不太可能，所以我们缩小下范围，只穷举所有中国的IP段。考虑到新浪的IP接口返回的是IP段，所以要穷举的部分又少了一部分。再考虑啊到IP段的最后一位及256个IP基本上都是在一个地区，所以我们要穷举的数据有少了很多。对于穷举最重要的是把IP地址换成INT型。</p>
<p>具体国内有多少IP地址段，可以到APNIC官方网站去查找或下面的文档</p>
<p><a href="http://ftp.apnic.net/apnic/dbase/data/country-ipv4.lst">http://ftp.apnic.net/apnic/dbase/data/country-ipv4.lst</a></p>
<p>下面就来看看穷举程序如何写：</p>
<pre>import re</pre>
<pre>def ipv3_to_int(s):
    l = [int(i) for i in s.split('.')]
    return  (l[0] &lt;&lt; 16) | (l[1] &lt;&lt; 8) | l[2]</pre>
<pre>def int_to_ipv3(s):
    ip1 = s &gt;&gt; 16 &amp; 0xFF
    ip2 = s &gt;&gt; 8 &amp; 0xFF
    ip3 = s &amp; 0xFF
    return "%d.%d.%d" % (ip1, ip2, ip3)</pre>
<pre>i = open('ChinaIPAddress.csv', 'r')
list = i.readlines()
for iplist in list:
    pattern = re.compile('(\d{1,3}\.\d{1,3}\.\d{1,3})\.\d{1,3}')
    ips = pattern.findall(iplist)
    x = ips[0]
    y = ips[1]
    for ip in range (ipv3_to_int(x),ipv3_to_int(y)):
        ipadress=str(ip)
        #ip_address = int_to_ipv3(ip)
        o = open('ChinaIPAddress.txt','a')
        o.writelines(ipadress)
        o.writelines('\n')
    o.close()
i.close()</pre>
<p>当上面的不走完成后就可以对新浪IP接口进行抓取了，抓取代码如下：</p>
<pre>#!/usr/bin/python
# -*- coding: utf-8 -*-
import urllib,urllib2, simplejson, sqlite3, time</pre>
<pre>def ipv3_to_int(s):
    l = [int(i) for i in s.split('.')]
    return  (l[0] &lt;&lt; 16) | (l[1] &lt;&lt; 8) | l[2]</pre>
<pre>def int_to_ipv4(s):
    ip1 = s &gt;&gt; 16 &amp; 0xFF
    ip2 = s &gt;&gt; 8 &amp; 0xFF
    ip3 = s &amp; 0xFF
    return "%d.%d.%d.0" % (ip1, ip2, ip3)</pre>
<pre>def fetch(ipv4, **kwargs):
    kwargs.update({
        'ip': ipv4,
        'format': 'json',
    })
    DATA_BASE = "http://int.dpool.sina.com.cn/iplookup/iplookup.php"
    url = DATA_BASE + '?' + urllib.urlencode(kwargs)
    print url
    fails = 0
    try:
        result = simplejson.load(urllib2.urlopen(url,timeout=20))
    except (urllib2.URLError,IOError):
        fails += 1
        if fails &lt; 10:
            result = fetch(ipv4)
        else:
            sleep_download_time = 60*10
            time.sleep(sleep_download_time)
            result = fetch(ipv4)
    return result</pre>
<pre>def dbcreate():
    c = conn.cursor()
    c.execute('''create table ipdata(
        ip integer primary key,
        ret integer,
        start text,
        end text,
        country text,
        province text,
        city text,
        district text,
        isp text,
        type text,
        desc text
    )''')
    conn.commit()
    c.close()</pre>
<pre>def dbinsert(ip,address):
    c = conn.cursor()
    c.execute('insert into ipdata values(?,?,?,?,?,?,?,?,?,?,?)',(ip,address['ret'],address['start'],address['end'],address['country'],address['province'],address['city'],address['district'],address['isp'],address['type'],address['desc']))
    conn.commit()
    c.close()</pre>
<pre>conn = sqlite3.connect('ipaddress.sqlite3.db')
dbcreate()</pre>
<pre>i = open('ChinaIPAddress.txt','r')
list = [s.strip() for s in i.readlines()]
end = 0
for ip in list:
    ip = int(ip)
    if ip &gt; end :
        ipaddress = int_to_ipv4(ip)
        info = fetch(ipaddress)
        if info['ret'] == -1:
            pass
        else:
            dbinsert(ip,info)
            end = ipv3_to_int(info['end'])
            print ip,end
    else :
        pass
i.close()</pre>
<p>到此就能把新浪所有的国内IP数据给抓取出来，然后在数据分析的工程中大派用场。~</p>
<p>Related posts:<ol>
<li><a href='http://www.biaodianfu.com/python-sqlite-cvs.html' rel='bookmark' title='使用python将Sqlite中的数据直接输出为CVS'>使用python将Sqlite中的数据直接输出为CVS</a></li>
<li><a href='http://www.biaodianfu.com/php-api-framework.html' rel='bookmark' title='PHP API 框架开发的学习'>PHP API 框架开发的学习</a></li>
<li><a href='http://www.biaodianfu.com/qqwry-format-detail.html' rel='bookmark' title='纯真IP数据库格式读取方法(JAVA/PHP/Python)'>纯真IP数据库格式读取方法(JAVA/PHP/Python)</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.biaodianfu.com/python-sina-ip.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>使用Python来检查统计代码是否布置到位</title>
		<link>http://www.biaodianfu.com/python-check-statistics-code.html</link>
		<comments>http://www.biaodianfu.com/python-check-statistics-code.html#comments</comments>
		<pubDate>Wed, 30 Nov 2011 02:28:22 +0000</pubDate>
		<dc:creator>标点符</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.biaodianfu.com/?p=4498</guid>
		<description><![CDATA[在给网站布置统计代码后，往往需要检查开发人员布置的代码是否到位，采用人力的方式去检查很费时间，于是自己整了一个Python自动检查代码的小程序，现拿出来分享下。 # -*- coding: utf-8 -*- __author__ = &#8216;www.biaodianfu.com&#8217; import urllib2 ,gzip, StringIO, re code = “_gaq.push(['_setAccount', 'UA-123456789-1']);” filename = &#8216;urllist.txt&#8217; checklist = open(filename,&#8217;r') #urls = checklist.readlines() urls = [l.strip() for l in checklist.readlines()] for url in urls:     page_encode = “utf-8&#8243;     try:         request = urllib2.Request(url)         request.add_header(“Accept-encoding”, “gzip”)         sock = urllib2.urlopen(request) [...]]]></description>
			<content:encoded><![CDATA[<p>在给网站布置统计代码后，往往需要检查开发人员布置的代码是否到位，采用人力的方式去检查很费时间，于是自己整了一个Python自动检查代码的小程序，现拿出来分享下。</p>
<p># -*- coding: utf-8 -*-<br />
__author__ = &#8216;www.biaodianfu.com&#8217;<br />
import urllib2 ,gzip, StringIO, re<br />
code = “_gaq.push(['_setAccount', 'UA-123456789-1']);”<br />
filename = &#8216;urllist.txt&#8217;<br />
checklist = open(filename,&#8217;r')<br />
#urls = checklist.readlines()<br />
urls = [l.strip() for l in checklist.readlines()]<br />
for url in urls:<br />
    page_encode = “utf-8&#8243;<br />
    try:<br />
        request = urllib2.Request(url)<br />
        request.add_header(“Accept-encoding”, “gzip”)<br />
        sock = urllib2.urlopen(request)<br />
        page = sock.read()<br />
        if sock.headers.get(&#8216;content-encoding&#8217;, None) == &#8216;gzip&#8217;:<br />
            page = gzip.GzipFile(fileobj=StringIO.StringIO(page)).read()<br />
        if not isinstance(page, unicode):<br />
            page = unicode(page, page_encode)<br />
        times = page.count(code)<br />
        print “%s 出现了 %d 次” % (url,times)<br />
    except urllib2.HTTPError,e:<br />
        print url,e.code<br />
checklist.close()</p>
<p>如果要判断_setAccount或其他_gaq中的项是否添加正确，可以采用以下代码。</p>
<p># -*- coding: utf-8 -*-<br />
__author__ = &#8216;www.biaodianfu.com&#8217;<br />
# -*- coding: utf-8 -*-<br />
import urllib2 ,gzip, StringIO, re<br />
filename = &#8216;urllist.txt&#8217;<br />
checklist = open(filename,&#8217;r')<br />
#urls = checklist.readlines()<br />
urls = [l.strip() for l in checklist.readlines()]<br />
for url in urls:<br />
    page_encode = “utf-8&#8243;<br />
    try:<br />
        request = urllib2.Request(url)<br />
        request.add_header(“Accept-encoding”, “gzip”)<br />
        sock = urllib2.urlopen(request)<br />
        page = sock.read()<br />
        if sock.headers.get(&#8216;content-encoding&#8217;, None) == &#8216;gzip&#8217;:<br />
            page = gzip.GzipFile(fileobj=StringIO.StringIO(page)).read()<br />
        if not isinstance(page, unicode):<br />
            page = unicode(page, page_encode)<br />
        pattern = re.compile(“&#8216;_setAccount&#8217;, &#8216;(.*?)&#8217;”)<br />
        codes = pattern.findall(page)<br />
        account = codes[0].encode(&#8216;utf-8&#8242;)<br />
        print “%s Account:%s” % (url,account)<br />
    except urllib2.HTTPError,e:<br />
        print url,e.code<br />
checklist.close()</p>
<p>Related posts:<ol>
<li><a href='http://www.biaodianfu.com/python-sqlite-cvs.html' rel='bookmark' title='使用python将Sqlite中的数据直接输出为CVS'>使用python将Sqlite中的数据直接输出为CVS</a></li>
<li><a href='http://www.biaodianfu.com/python-sina-ip.html' rel='bookmark' title='使用python来抓取新浪的IP数据'>使用python来抓取新浪的IP数据</a></li>
<li><a href='http://www.biaodianfu.com/parameter.html' rel='bookmark' title='内页PR查询软件：PaRaMeter'>内页PR查询软件：PaRaMeter</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.biaodianfu.com/python-check-statistics-code.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>在Windows上安装配置Redis及Python使用</title>
		<link>http://www.biaodianfu.com/windows-redis-python.html</link>
		<comments>http://www.biaodianfu.com/windows-redis-python.html#comments</comments>
		<pubDate>Fri, 25 Nov 2011 11:26:30 +0000</pubDate>
		<dc:creator>标点符</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[网站开发]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[redis]]></category>

		<guid isPermaLink="false">http://www.biaodianfu.com/?p=4474</guid>
		<description><![CDATA[一、Redis的介绍 Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库，并提供多种语言的API。 作为Key-value型数据库，Redis也提供了键（Key）和键值（Value）的映射关系。但是，除了常规的数值或字符串，Redis的键值还可以是以下形式之一： Lists （列表） Sets （集合） Sorted sets （有序集合） Hashes （哈希表） 键值的数据类型决定了该键值支持的操作。Redis支持诸如列表、集合或有序集合的交集、并集、查集等高级原子操作；同时，如果键值的类型是普通数字，Redis则提供自增等原子操作。 通常，Redis将数据存储于内存中，或被配置为使用虚拟内存.通过两种方式可以实现数据持久化：使用快照的方式，将内存中的数据不断写入磁盘；或使用类似MySQL的日志方式，记录每次更新的日志。前者性能较高，但是可能会引起一定程度的数据丢失；后者相反。 Redis支持将数据同步到多台从库上，这种特性对提高读取性能非常有益。 相比需要依赖磁盘记录每个更新的数据库，基于内存的特性无疑给Redis带来了非常优秀的性能。读写操作之间有显著的性能差异。 二、Redis在Window的安装 Redis官方（http://redis.io/）提供了源代码下载但是并不能直接运用与Windows系统，好在牛人做了一个第三方的预编译文件。 下载地址为：https://github.com/dmajkic/redis/downloads 使用起来也非常的简单，只要解压后运行目录下的redis-server.exe文件即可。 三、用Python来操作Redis Redis的Python接口目前比较成熟的是redis-py，项目地址为 https://github.com/andymccurdy/redis-py 如果你的电脑已经安装了Pip，可以直接运行 pip install redis即可。 具体如何对数据进行更加详细的操作，后面再详述。另外如果你希望在PHP中也使用Redis的话，请访问：http://rediska.geometria-lab.net/ 参考地址：http://zh.wikipedia.org/wiki/Redis Related posts: StartSSL免费的HTTPS证书颁发机构 MySQL数据库表结构导出工具 Facebook XHP:让PHP成为模板引擎]]></description>
			<content:encoded><![CDATA[<p><strong>一、Redis的介绍</strong></p>
<p><strong>Redis</strong>是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库，并提供多种语言的API。</p>
<p>作为Key-value型数据库，Redis也提供了键（Key）和键值（Value）的映射关系。但是，除了常规的数值或字符串，Redis的键值还可以是以下形式之一：</p>
<ul>
<li>Lists （列表）</li>
<li>Sets （集合）</li>
<li>Sorted sets （有序集合）</li>
<li>Hashes （哈希表）</li>
</ul>
<p>键值的数据类型决定了该键值支持的操作。Redis支持诸如列表、集合或有序集合的交集、并集、查集等高级原子操作；同时，如果键值的类型是普通数字，Redis则提供自增等原子操作。</p>
<p>通常，Redis将数据存储于内存中，或被配置为使用虚拟内存.通过两种方式可以实现数据持久化：使用快照的方式，将内存中的数据不断写入磁盘；或使用类似MySQL的日志方式，记录每次更新的日志。前者性能较高，但是可能会引起一定程度的数据丢失；后者相反。</p>
<p>Redis支持将数据同步到多台从库上，这种特性对提高读取性能非常有益。</p>
<p>相比需要依赖磁盘记录每个更新的数据库，基于内存的特性无疑给Redis带来了非常优秀的性能。读写操作之间有显著的性能差异。</p>
<p><strong>二、Redis在Window的安装</strong></p>
<p>Redis官方（<a href="http://redis.io/">http://redis.io/</a>）提供了源代码下载但是并不能直接运用与Windows系统，好在牛人做了一个第三方的预编译文件。</p>
<p>下载地址为：<a href="https://github.com/dmajkic/redis/downloads">https://github.com/dmajkic/redis/downloads</a></p>
<p>使用起来也非常的简单，只要解压后运行目录下的redis-server.exe文件即可。</p>
<p><strong>三、用Python来操作Redis</strong></p>
<p>Redis的Python接口目前比较成熟的是redis-py，项目地址为</p>
<p><a href="https://github.com/andymccurdy/redis-py">https://github.com/andymccurdy/redis-py</a></p>
<p>如果你的电脑已经安装了Pip，可以直接运行 <em>pip install redis</em>即可。</p>
<p>具体如何对数据进行更加详细的操作，后面再详述。另外如果你希望在PHP中也使用Redis的话，请访问：<a href="http://rediska.geometria-lab.net/">http://rediska.geometria-lab.net/</a></p>
<p>参考地址：<a href="http://zh.wikipedia.org/wiki/Redis">http://zh.wikipedia.org/wiki/Redis</a></p>
<p>Related posts:<ol>
<li><a href='http://www.biaodianfu.com/startssl.html' rel='bookmark' title='StartSSL免费的HTTPS证书颁发机构'>StartSSL免费的HTTPS证书颁发机构</a></li>
<li><a href='http://www.biaodianfu.com/dbexportdoc-for-mysql.html' rel='bookmark' title='MySQL数据库表结构导出工具'>MySQL数据库表结构导出工具</a></li>
<li><a href='http://www.biaodianfu.com/facebook-xhp.html' rel='bookmark' title='Facebook XHP:让PHP成为模板引擎'>Facebook XHP:让PHP成为模板引擎</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.biaodianfu.com/windows-redis-python.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scrapy在Windows上的安装笔记</title>
		<link>http://www.biaodianfu.com/install-scrapy-on-windows.html</link>
		<comments>http://www.biaodianfu.com/install-scrapy-on-windows.html#comments</comments>
		<pubDate>Tue, 06 Sep 2011 04:22:53 +0000</pubDate>
		<dc:creator>标点符</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Scrapy]]></category>

		<guid isPermaLink="false">http://www.biaodianfu.com/?p=4268</guid>
		<description><![CDATA[先前已经有一篇关于Scrapy的介绍了（Scrapy的架构），今天这篇文章是将怎么在Windows上安装Scrapy。 在安装Scrapy前首先需要确定的是已经安装好了Python（目前Scrapy支持Python2.5，Python2.6和Python2.7）。官方文档中介绍了三种方法进行安装，我采用的是使用 easy_install 进行安装，首先是下载Windows版本的setuptools（下载地址：http://pypi.python.org/pypi/setuptools），下载完后一路NEXT就可以了。 安装完setuptool以后。执行CMD，然后运行一下命令： easy_install -U Scrapy 同样的你可以选择使用pip安装，pip的地址：http://pypi.python.org/pypi/pip 使用pip安装Scrapy的命令为 pip install Scrapy 如果你的电脑先前装过visual studio 2008 或 visual studio 2010那么一起顺利，Scrapy已经安装完成。如果出现下列报错：Unable to find vcvarsall.bat 那么你需要折腾下。你可以安装visual studio 后进行安装或采用下面的方式进行解决： 首先安装MinGW（MinGW下载地址：http://sourceforge.net/projects/mingw/files/），在MinGW的安装目录下找到bin的文件夹，找到mingw32-make.exe，复制一份更名为make.exe； 把MinGW的路径添加到环境变量path中，比如我把MinGW安装到D:\MinGW\中，就把D:\MinGW\bin添加到path中； 打开命令行窗口，在命令行窗口中进入到要安装代码的目录下； 输入如下命令 setup.py install build &#8211;compiler=mingw32 就可以安装了。 经测试安装vs2010无效，删除后重新安装的vs2008才生效。基本上安装进行到这里就已经结束了，但还是在我自己的电脑商再次重新安装时却发现如下问题： &#8216;xslt-config&#8217; 不是内部或外部命令，也不是可运行的程序或批处理文件。 出现上述问题的主要是lxml安装不成功，只要上http://pypi.python.org/simple/lxml/下载个exe文件进行安装就可以了。 参考文档：http://doc.scrapy.org/intro/install.html Related posts: 使用Python连接MSSQL方法 Python小程序：每天一个文件夹 使用Python来连接MySQL]]></description>
			<content:encoded><![CDATA[<p>先前已经有一篇关于Scrapy的介绍了（<a title="Python抓取框架：Scrapy的架构" href="http://www.biaodianfu.com/scrapy-architecture.html">Scrapy的架构</a>），今天这篇文章是将怎么在Windows上安装Scrapy。</p>
<p>在安装Scrapy前首先需要确定的是已经安装好了Python（目前Scrapy支持Python2.5，Python2.6和Python2.7）。官方文档中介绍了三种方法进行安装，我采用的是使用 easy_install 进行安装，首先是下载Windows版本的setuptools（下载地址：<a href="http://pypi.python.org/pypi/setuptools">http://pypi.python.org/pypi/setuptools</a>），下载完后一路NEXT就可以了。</p>
<p>安装完setuptool以后。执行CMD，然后运行一下命令：</p>
<p><em>easy_install -U Scrapy</em></p>
<p>同样的你可以选择使用pip安装，pip的地址：<a href="http://pypi.python.org/pypi/pip">http://pypi.python.org/pypi/pip</a></p>
<p>使用pip安装Scrapy的命令为</p>
<p><em>pip install Scrapy</em></p>
<p>如果你的电脑先前装过visual studio 2008 <del>或 visual studio 2010</del>那么一起顺利，Scrapy已经安装完成。如果出现下列报错：<em>Unable to find vcvarsall.bat </em>那么你需要折腾下。你可以安装visual studio 后进行安装或采用下面的方式进行解决：</p>
<ol>
<li>首先安装MinGW（MinGW下载地址：<a href="http://sourceforge.net/projects/mingw/files/">http://sourceforge.net/projects/mingw/files/</a>），在MinGW的安装目录下找到<strong>bin</strong>的文件夹，找到<strong>mingw32-make.exe</strong>，复制一份更名为<strong>make.exe</strong>；</li>
<li>把MinGW的路径添加到环境变量<strong>path</strong>中，比如我把MinGW安装到<strong>D:\MinGW\</strong>中，就把<strong>D:\MinGW\bin</strong>添加到<strong>path</strong>中；</li>
<li>打开命令行窗口，在命令行窗口中进入到要安装代码的目录下；</li>
<li>输入如下命令 <em>setup.py install build &#8211;compiler=mingw32 </em>就可以安装了。</li>
</ol>
<p>经测试安装vs2010无效，删除后重新安装的vs2008才生效。基本上安装进行到这里就已经结束了，但还是在我自己的电脑商再次重新安装时却发现如下问题：</p>
<p>&#8216;xslt-config&#8217; 不是内部或外部命令，也不是可运行的程序或批处理文件。</p>
<p>出现上述问题的主要是lxml安装不成功，只要上<a href="http://pypi.python.org/simple/lxml/">http://pypi.python.org/simple/lxml/</a>下载个exe文件进行安装就可以了。</p>
<p>参考文档：<a href="http://doc.scrapy.org/intro/install.html">http://doc.scrapy.org/intro/install.html</a></p>
<p>Related posts:<ol>
<li><a href='http://www.biaodianfu.com/python-mssql.html' rel='bookmark' title='使用Python连接MSSQL方法'>使用Python连接MSSQL方法</a></li>
<li><a href='http://www.biaodianfu.com/python-today-dir.html' rel='bookmark' title='Python小程序：每天一个文件夹'>Python小程序：每天一个文件夹</a></li>
<li><a href='http://www.biaodianfu.com/python-mysql.html' rel='bookmark' title='使用Python来连接MySQL'>使用Python来连接MySQL</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.biaodianfu.com/install-scrapy-on-windows.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《Learn Python The Hard Way》学习笔记</title>
		<link>http://www.biaodianfu.com/learn-python-the-hard-way-study-notes.html</link>
		<comments>http://www.biaodianfu.com/learn-python-the-hard-way-study-notes.html#comments</comments>
		<pubDate>Mon, 22 Aug 2011 01:32:25 +0000</pubDate>
		<dc:creator>标点符</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.biaodianfu.com/?p=4169</guid>
		<description><![CDATA[《learn python the hard way》是一本非常好的Python入门书籍，这是一本需要你一步一步去敲代码去学习的书。   《learn python the hard way》地址：http://learnpythonthehardway.org/book/ 在学习Python之前首先是安装Python运行环境，这里使用的Windows平台，以下为安装步骤： 安装Python本身其实很简单，选定安装目录，然后一路NEXT。在windows下安装python之后，系统并不会自动添加相应的环境变量。此时不能在命令行直接使用python命令。所以就需要设定Windows系统变量。 1. 首先需要在系统中注册python环境变量：假设python的安装路径为D:\python2.6，则修改我的电脑-&#62;属性-&#62;高级-&#62;环境变量-&#62;系统变量中的PATH为：PATH=PATH;D:\python26 上述环境变量设置成功之后，就可以在命令行直接使用python命令。或执行”python *.py”运行python脚本了。 2. 此时，还是只能通过”python *.py”运行python脚本，若希望直接运行*.py，只需再修改另一个环境变量PATHEXT: PATHEXT=PATHEXT;.PY;.PYM 以下为笔记内容，由于还没看完，所以只有一点点。 练习:1：print语句 单引号和双引号都可以使用 单引号里可以包含双引号，双引号里可以包含单引号。 Python使用#号进行注释 如需要在一行输出，可以使用,作为连接符，在PHP中是.号 如果引号中需要使用相同的引号，需哟啊使用\转义。 print为单行输出 练习2：#号注释 练习3：数学运算 整数相除得到的还是整数，后面的小数点去掉。 运算符不要加引号，引号中的运算会被当成字符串。 判断运算符(&#62; 4、运算出有浮点小数，运算结果才会是浮点数。浮点数如果小数点后面是0，默认保存1个0. 练习4：变量 和PHP不一样的是变量不需要使用$符号标注。 练习5：变量的输出 输出时，用%表示变量。 %f输出的默认后面6位小数 多个变量用括号合并在一起 变量输出前可做运算。 %r为输出任意格式。 要限定输出的整数位数（宽度），使用%04d，中间的0不可少。 浮点数如需保留两位小数，使用%0.2f，限定浮点数的宽度，可以使用%06.2f，小数点计算在宽度内。 练习6：文本和字符串 格式化字符可以给变量赋值 字符串相连可以使用+ 练习7：内容输出 字符串可以直接跟在格式化字符串后面。 相同内容输出多遍，可以使用*号 print后面加,可以是输出不换行。（但有空格） 练习8：输出 输出前可以先设定输出格式 练习9：输出 [...]]]></description>
			<content:encoded><![CDATA[<p>《learn python the hard way》是一本非常好的Python入门书籍，这是一本需要你一步一步去敲代码去学习的书。</p>
<p> <img class="alignnone size-full wp-image-4171" title="learn_python" src="http://www.biaodianfu.com/wp-content/uploads/2011/08/learn_python.jpg" alt="" width="245" height="320" /></p>
<p>《learn python the hard way》地址：<a href="http://learnpythonthehardway.org/book/">http://learnpythonthehardway.org/book/</a></p>
<p>在学习Python之前首先是安装Python运行环境，这里使用的Windows平台，以下为安装步骤：</p>
<p>安装Python本身其实很简单，选定安装目录，然后一路NEXT。在windows下安装python之后，系统并不会自动添加相应的环境变量。此时不能在命令行直接使用python命令。所以就需要设定Windows系统变量。</p>
<p>1. 首先需要在系统中注册python环境变量：假设python的安装路径为D:\python2.6，则修改我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中的PATH为：PATH=PATH;D:\python26</p>
<p>上述环境变量设置成功之后，就可以在命令行直接使用python命令。或执行”python *.py”运行python脚本了。</p>
<p>2. 此时，还是只能通过”python *.py”运行python脚本，若希望直接运行*.py，只需再修改另一个环境变量PATHEXT:<br />
PATHEXT=PATHEXT;.PY;.PYM</p>
<p>以下为笔记内容，由于还没看完，所以只有一点点。</p>
<p>练习:1：print语句</p>
<ol>
<li>单引号和双引号都可以使用</li>
<li>单引号里可以包含双引号，双引号里可以包含单引号。</li>
<li>Python使用#号进行注释</li>
<li>如需要在一行输出，可以使用,作为连接符，在PHP中是.号</li>
<li>如果引号中需要使用相同的引号，需哟啊使用\转义。</li>
<li>print为单行输出</li>
</ol>
<p>练习2：#号注释</p>
<p>练习3：数学运算</p>
<ol>
<li>整数相除得到的还是整数，后面的小数点去掉。</li>
<li>运算符不要加引号，引号中的运算会被当成字符串。</li>
<li>判断运算符(&gt; 4、运算出有浮点小数，运算结果才会是浮点数。浮点数如果小数点后面是0，默认保存1个0.</li>
</ol>
<p>练习4：变量</p>
<ol>
<li>和PHP不一样的是变量不需要使用$符号标注。</li>
</ol>
<p>练习5：变量的输出</p>
<ol>
<li>输出时，用%表示变量。</li>
<li>%f输出的默认后面6位小数</li>
<li>多个变量用括号合并在一起</li>
<li>变量输出前可做运算。</li>
<li>%r为输出任意格式。</li>
<li>要限定输出的整数位数（宽度），使用%04d，中间的0不可少。</li>
<li>浮点数如需保留两位小数，使用%0.2f，限定浮点数的宽度，可以使用%06.2f，小数点计算在宽度内。</li>
</ol>
<p>练习6：文本和字符串</p>
<ol>
<li>格式化字符可以给变量赋值</li>
<li>字符串相连可以使用+</li>
</ol>
<p>练习7：内容输出</p>
<ol>
<li>字符串可以直接跟在格式化字符串后面。</li>
<li>相同内容输出多遍，可以使用*号</li>
<li>print后面加,可以是输出不换行。（但有空格）</li>
</ol>
<p>练习8：输出</p>
<ol>
<li>输出前可以先设定输出格式</li>
</ol>
<p>练习9：输出</p>
<ol>
<li>多行输出使用三对双引号</li>
<li>使用\n可输出换行</li>
</ol>
<p>练习10：转义符</p>
<ol>
<li>3对单引号也可以多行输出</li>
<li>%r输出带单引号，%s输出不带。</li>
</ol>
<p>练习11：输入</p>
<ol>
<li>使用raw_input()进行输入</li>
</ol>
<p>练习12：输入带内容</p>
<ol>
<li>直接将要显示的文本字符串写入raw_input()的参数。</li>
<li>pydoc的使用：pydoc.help(raw_input)</li>
</ol>
<p>未完待续</p>
<p>Related posts:<ol>
<li><a href='http://www.biaodianfu.com/python-today-dir.html' rel='bookmark' title='Python小程序：每天一个文件夹'>Python小程序：每天一个文件夹</a></li>
<li><a href='http://www.biaodianfu.com/install-scrapy-on-windows.html' rel='bookmark' title='Scrapy在Windows上的安装笔记'>Scrapy在Windows上的安装笔记</a></li>
<li><a href='http://www.biaodianfu.com/python.html' rel='bookmark' title='编程语言介绍之Python'>编程语言介绍之Python</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.biaodianfu.com/learn-python-the-hard-way-study-notes.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python抓取框架：Scrapy的架构</title>
		<link>http://www.biaodianfu.com/scrapy-architecture.html</link>
		<comments>http://www.biaodianfu.com/scrapy-architecture.html#comments</comments>
		<pubDate>Sun, 03 Jul 2011 09:37:24 +0000</pubDate>
		<dc:creator>标点符</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[抓取]]></category>
		<category><![CDATA[架构]]></category>

		<guid isPermaLink="false">http://www.biaodianfu.com/?p=3918</guid>
		<description><![CDATA[最近在学Python，同时也在学如何使用python抓取数据，于是就被我发现了这个非常受欢迎的Python抓取框架Scrapy，下面一起学习下Scrapy的架构，便于更好的使用这个工具。 一、概述 下图显示了Scrapy的大体架构，其中包含了它的主要组件及系统的数据处理流程（绿色箭头所示）。下面就来一个个解释每个组件的作用及数据的处理过程。 二、组件 1、Scrapy Engine（Scrapy引擎） Scrapy引擎是用来控制整个系统的数据处理流程，并进行事务处理的触发。更多的详细内容可以看下面的数据处理流程。 2、Scheduler（调度） 调度程序从Scrapy引擎接受请求并排序列入队列，并在Scrapy引擎发出请求后返还给他们。 3、Downloader（下载器） 下载器的主要职责是抓取网页并将网页内容返还给蜘蛛( Spiders)。 4、Spiders（蜘蛛） 蜘蛛是有Scrapy用户自己定义用来解析网页并抓取制定URL返回的内容的类，每个蜘蛛都能处理一个域名或一组域名。换句话说就是用来定义特定网站的抓取和解析规则。 蜘蛛的整个抓取流程（周期）是这样的： 首先获取第一个URL的初始请求，当请求返回后调取一个回调函数。第一个请求是通过调用start_requests()方法。该方法默认从start_urls中的Url中生成请求，并执行解析来调用回调函数。 在回调函数中，你可以解析网页响应并返回项目对象和请求对象或两者的迭代。这些请求也将包含一个回调，然后被Scrapy下载，然后有指定的回调处理。 在回调函数中，你解析网站的内容，同程使用的是Xpath选择器（但是你也可以使用BeautifuSoup, lxml或其他任何你喜欢的程序），并生成解析的数据项。 最后，从蜘蛛返回的项目通常会进驻到项目管道。 5、Item Pipeline（项目管道） 项目管道的主要责任是负责处理有蜘蛛从网页中抽取的项目，他的主要任务是清晰、验证和存储数据。当页面被蜘蛛解析后，将被发送到项目管道，并经过几个特定的次序处理数据。每个项目管道的组件都是有一个简单的方法组成的Python类。他们获取了项目并执行他们的方法，同时他们还需要确定的是是否需要在项目管道中继续执行下一步或是直接丢弃掉不处理。 项目管道通常执行的过程有： 清洗HTML数据 验证解析到的数据（检查项目是否包含必要的字段） 检查是否是重复数据（如果重复就删除） 将解析到的数据存储到数据库中 6、Downloader middlewares（下载器中间件） 下载中间件是位于Scrapy引擎和下载器之间的钩子框架，主要是处理Scrapy引擎与下载器之间的请求及响应。它提供了一个自定义的代码的方式来拓展Scrapy的功能。下载中间器是一个处理请求和响应的钩子框架。他是轻量级的，对Scrapy尽享全局控制的底层的系统。 7、Spider middlewares（蜘蛛中间件） 蜘蛛中间件是介于Scrapy引擎和蜘蛛之间的钩子框架，主要工作是处理蜘蛛的响应输入和请求输出。它提供一个自定义代码的方式来拓展Scrapy的功能。蛛中间件是一个挂接到Scrapy的蜘蛛处理机制的框架，你可以插入自定义的代码来处理发送给蜘蛛的请求和返回蜘蛛获取的响应内容和项目。 8、Scheduler middlewares（调度中间件） 调度中间件是介于Scrapy引擎和调度之间的中间件，主要工作是处从Scrapy引擎发送到调度的请求和响应。他提供了一个自定义的代码来拓展Scrapy的功能。 三、数据处理流程 Scrapy的整个数据处理流程有Scrapy引擎进行控制，其主要的运行方式为： 引擎打开一个域名，时蜘蛛处理这个域名，并让蜘蛛获取第一个爬取的URL。 引擎从蜘蛛那获取第一个需要爬取的URL，然后作为请求在调度中进行调度。 引擎从调度那获取接下来进行爬取的页面。 调度将下一个爬取的URL返回给引擎，引擎将他们通过下载中间件发送到下载器。 当网页被下载器下载完成以后，响应内容通过下载中间件被发送到引擎。 引擎收到下载器的响应并将它通过蜘蛛中间件发送到蜘蛛进行处理。 蜘蛛处理响应并返回爬取到的项目，然后给引擎发送新的请求。 引擎将抓取到的项目项目管道，并向调度发送请求。 系统重复第二部后面的操作，直到调度中没有请求，然后断开引擎与域之间的联系。 四、驱动器 Scrapy是由Twisted写的一个受欢迎的Python事件驱动网络框架，它使用的是非堵塞的异步处理。如果要获得更多关于异步编程和Twisted的信息，请参考下面两条链接。 使用Twisted进行异步编程。 您好，异步编程。 本文由标点符进行翻译，英文原文为：http://doc.scrapy.org/topics/architecture.html Related posts: [...]]]></description>
			<content:encoded><![CDATA[<p>最近在学Python，同时也在学如何使用python抓取数据，于是就被我发现了这个非常受欢迎的Python抓取框架Scrapy，下面一起学习下Scrapy的架构，便于更好的使用这个工具。</p>
<p><strong>一、概述</strong></p>
<p>下图显示了Scrapy的大体架构，其中包含了它的主要组件及系统的数据处理流程（绿色箭头所示）。下面就来一个个解释每个组件的作用及数据的处理过程。</p>
<p><img class="alignnone size-full wp-image-3938" title="scrapy_architecture" src="http://www.biaodianfu.com/wp-content/uploads/2011/07/scrapy_architecture.png" alt="" width="560" height="395" /></p>
<p><strong>二、组件</strong></p>
<p>1、Scrapy Engine（Scrapy引擎）</p>
<p>Scrapy引擎是用来控制整个系统的数据处理流程，并进行事务处理的触发。更多的详细内容可以看下面的数据处理流程。</p>
<p>2、Scheduler（调度）</p>
<p>调度程序从Scrapy引擎接受请求并排序列入队列，并在Scrapy引擎发出请求后返还给他们。</p>
<p>3、Downloader（下载器）</p>
<p>下载器的主要职责是抓取网页并将网页内容返还给蜘蛛( Spiders)。</p>
<p>4、Spiders（蜘蛛）</p>
<p>蜘蛛是有Scrapy用户自己定义用来解析网页并抓取制定URL返回的内容的类，每个蜘蛛都能处理一个域名或一组域名。换句话说就是用来定义特定网站的抓取和解析规则。</p>
<p>蜘蛛的整个抓取流程（周期）是这样的：</p>
<ol>
<li>首先获取第一个URL的初始请求，当请求返回后调取一个回调函数。第一个请求是通过调用start_requests()方法。该方法默认从start_urls中的Url中生成请求，并执行解析来调用回调函数。</li>
<li>在回调函数中，你可以解析网页响应并返回项目对象和请求对象或两者的迭代。这些请求也将包含一个回调，然后被Scrapy下载，然后有指定的回调处理。</li>
<li>在回调函数中，你解析网站的内容，同程使用的是Xpath选择器（但是你也可以使用BeautifuSoup, lxml或其他任何你喜欢的程序），并生成解析的数据项。</li>
<li>最后，从蜘蛛返回的项目通常会进驻到项目管道。</li>
</ol>
<p>5、Item Pipeline（项目管道）</p>
<p>项目管道的主要责任是负责处理有蜘蛛从网页中抽取的项目，他的主要任务是清晰、验证和存储数据。当页面被蜘蛛解析后，将被发送到项目管道，并经过几个特定的次序处理数据。每个项目管道的组件都是有一个简单的方法组成的Python类。他们获取了项目并执行他们的方法，同时他们还需要确定的是是否需要在项目管道中继续执行下一步或是直接丢弃掉不处理。</p>
<p>项目管道通常执行的过程有：</p>
<ol>
<li>清洗HTML数据</li>
<li>验证解析到的数据（检查项目是否包含必要的字段）</li>
<li>检查是否是重复数据（如果重复就删除）</li>
<li>将解析到的数据存储到数据库中</li>
</ol>
<p>6、Downloader middlewares（下载器中间件）</p>
<p>下载中间件是位于Scrapy引擎和下载器之间的钩子框架，主要是处理Scrapy引擎与下载器之间的请求及响应。它提供了一个自定义的代码的方式来拓展Scrapy的功能。下载中间器是一个处理请求和响应的钩子框架。他是轻量级的，对Scrapy尽享全局控制的底层的系统。</p>
<p>7、Spider middlewares（蜘蛛中间件）</p>
<p>蜘蛛中间件是介于Scrapy引擎和蜘蛛之间的钩子框架，主要工作是处理蜘蛛的响应输入和请求输出。它提供一个自定义代码的方式来拓展Scrapy的功能。蛛中间件是一个挂接到Scrapy的蜘蛛处理机制的框架，你可以插入自定义的代码来处理发送给蜘蛛的请求和返回蜘蛛获取的响应内容和项目。</p>
<p>8、Scheduler middlewares（调度中间件）</p>
<div id="components">
<div id="scheduler-middlewares">
<p>调度中间件是介于Scrapy引擎和调度之间的中间件，主要工作是处从Scrapy引擎发送到调度的请求和响应。他提供了一个自定义的代码来拓展Scrapy的功能。</p>
<p><strong>三、数据处理流程</strong></p>
<p>Scrapy的整个数据处理流程有Scrapy引擎进行控制，其主要的运行方式为：</p>
<ol>
<li>引擎打开一个域名，时蜘蛛处理这个域名，并让蜘蛛获取第一个爬取的URL。</li>
<li>引擎从蜘蛛那获取第一个需要爬取的URL，然后作为请求在调度中进行调度。</li>
<li>引擎从调度那获取接下来进行爬取的页面。</li>
<li>调度将下一个爬取的URL返回给引擎，引擎将他们通过下载中间件发送到下载器。</li>
<li>当网页被下载器下载完成以后，响应内容通过下载中间件被发送到引擎。</li>
<li>引擎收到下载器的响应并将它通过蜘蛛中间件发送到蜘蛛进行处理。</li>
<li>蜘蛛处理响应并返回爬取到的项目，然后给引擎发送新的请求。</li>
<li>引擎将抓取到的项目项目管道，并向调度发送请求。</li>
<li>系统重复第二部后面的操作，直到调度中没有请求，然后断开引擎与域之间的联系。</li>
</ol>
<p><strong>四、驱动器</strong></p>
<p>Scrapy是由<a href="http://twistedmatrix.com/trac/">Twisted</a>写的一个受欢迎的Python事件驱动网络框架，它使用的是非堵塞的异步处理。如果要获得更多关于异步编程和Twisted的信息，请参考下面两条链接。</p>
<ul>
<li><a href="http://twistedmatrix.com/projects/core/documentation/howto/async.html">使用Twisted进行异步编程</a>。</li>
<li><a href="http://jessenoller.com/2009/02/11/twisted-hello-asynchronous-programming/">您好，异步编程</a>。</li>
</ul>
</div>
</div>
<p>本文由<a href="http://www.biaodianfu.com/">标点符</a>进行翻译，英文原文为：http://doc.scrapy.org/topics/architecture.html</p>
<p>Related posts:<ol>
<li><a href='http://www.biaodianfu.com/install-scrapy-on-windows.html' rel='bookmark' title='Scrapy在Windows上的安装笔记'>Scrapy在Windows上的安装笔记</a></li>
<li><a href='http://www.biaodianfu.com/mplementation-of-targeted-crawling-system.html' rel='bookmark' title='聚焦爬虫：定向抓取系统的实现方法'>聚焦爬虫：定向抓取系统的实现方法</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.biaodianfu.com/scrapy-architecture.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

