之前自己看教程弄了一下这个爬虫,但是后来发现了这个教程,又重新再好好学学。
http://cuiqingcai.com/category/technique/python
我是按照这上面练习的,其中也遇到了一些问题。
我用的是win7 64位系统,所以安装这些的时候都要用64位的。安装的时候遇到了些问题,主要都是版本的问题。、
这是所有版本的下载列表:https://www.python.org/downloads/windows/
这是我用的那个64位的版本:https://www.python.org/ftp/python/2.7.9/python-2.7.9.amd64.msi
在安装的时候最好选择:当前用户,不要选那个所有用户,如果选了所有用户,后面还会遇到找不到这个路径的问题。
在安装的过程中还有一步,就是添加环境变量路径的那个选项,如果你在安装的时候选上,就不用自己去添加了。
之后安装这个:
一定要选好对应的版本:http://sourceforge.net/projects/pywin32/files/pywin32/Build%20219/
我用的是这个64的版本:http://cznic.dl.sourceforge.net/project/pywin32/pywin32/Build%20219/pywin32-219.win-amd64-py2.7.exe
之后安装这个Pip:
下载地址:https://bootstrap.pypa.io/get-pip.py
这个下来就是个.py的文件,放在一下目录下,然后用终端到这个目录下,执行: python get-pip.py安装完就好了
然后还要安装lxml和pyopenssl
这两个就用刚才那个pip安装就可以了:
pip install lxml
pip install pyopenssl
都是在终端上执行的。
然后就是安装那个scrapy了,
安装和上面那两个是一样的:
pip install scrapy
基本上就安装完了。我要去练习第一个爬“糗事百科”了。
我在按照那个教程来写的时候遇到了问题:
因为我想和后面的版本兼容的,因为2.x的版本是有print和print()的
但是3.x的版本只有print()了,所以我就想用成print()这样的。就遇到了问题:
# coding: utf-8 import urllib import urllib2 import re
page = 1 url = "" + str(page) user_agent = "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)" headers = { "User-Agent" : user_agent }
try: request = urllib2.Request(url, headers = headers) response = urllib2.urlopen(request) #print(response.read())
except urllib2.URLError, e: if hasattr(e, "code"): print(e.code) if hasattr(e, "reason"): print(e.reason)
content = response.read().decode("utf-8") pattern = re.compile( '<div.*?class="author.*?">.*?<a.*?</a>.*?<a.*?>(.*?)'+ '</a>.*?<div.*?class="content".*?title="(.*?)">(.*?)</div>'+ '(.*?)<div class="stats.*?class="number">(.*?)</i>', re.S)
items = re.findall(pattern, content) for item in items: print(item[0], item[1], item[2], item[3], item[4])
看最后我打印的print()是这样的,但是原教程中是print没有括号的,我一直执行我这个,输出大概是这样的:
(u'\u6211\u6709\u70b9\u574f\u3001 ', u'2015-03-25 15:16:12', u'\n\n\u6628\u5929\u5e2e\u540c\u4e8b\u5145\u8bdd\u8d39\uff0c\u5145\u9519\u53f7\u7801\u4e86\uff0c\u6253\u7535\u8bdd\u7ed9\u90a3\u4e2a\u53f7\u7801\uff0c\u8bf4\u4eca\u5929\u4e2d\u5348\u628a\u94b1\u9001\u5230\u5e97\u91cc\uff0c\u4eca\u5929\u4e2d\u5348\u771f\u7684\u6765\u5e97\u91cc\u9001\u4e86100\u5143\uff0c\u6211\u53c8\u76f8\u4fe1\u4e16\u754c\u4e0a\u8fd8\u662f\u597d\u4eba\u591a\u4e86\uff0c\u7ed9\u5927\u59d032\u4e2a\u8d5e\n\n', u'\n\n\n', u'6103')
不输出中文,我在网上查了一下,也没有找到是怎么回事,后来我改成print就可以正常的输出中文了。
for item in items: print item[0], item[1], item[2], item[3], item[4]
有时候不懂真是容易遇到小问题,其实就不是小问题了。