使用python2.7学习网络爬虫,问题锦集

初步学习选择了百度文库资料《-Python》,下面就练习遇到的问题做如下总结:

初始代码:

import re
import urllib2
import MySQLdb
from BeautifulSoup import BeautifulSoup 

url1="http://bbs.ustc.edu.cn/cgi/bbstdoc?board=PieBridge&start=3558"
fp=urllib2.urlopen(url1)
s=fp.read()  #把上操作的结果读出来赋给S
soup=BeautifulSoup(s) #用BeautifulSoup分析S
polist=soup.findAll('span')#找到所有tag<span>的内容
print polist[0].contents[0] #打印出第一个tag<span>中间的内容

问题1: 发现无法“import MySQLdb”,提示“ImportError: No module named MySQLdb”

解决方法,搜索下载MySQL-python-1.2.4.win32-py2.7.exe文件,保存在D:\Python27目录下双击运行,问题解决。

问题2:ImportError: No module named BeautifulSoup

方法:使用命令行,进入到D:\Python27\Scripts地址下,easy_install BeautifulSoup,显示安装成功。在D:\Python27\Lib\site-packages下查看,发现有文件beautifulsoup-3.2.1-py2.7.egg,但是直接写import BeautifulSoup程序通过,在上述代码运行时依然出现“No module named BeautifulSoup”问题。后来把命令行窗口,代码窗口全部关闭,环境变量加上D:\Python27、D:\Python27\Lib\site-packages胡乱试了一通,突然再打开就通过了,通过原理还是一头雾水呀。。。

改进代码1,搜索Pie版全部所有帖子

#目标:爬完PIE版所有帖子。问题:1,太慢,平均每秒一个;2:,有乱码。
import re
import urllib2
import MySQLdb
from BeautifulSoup import BeautifulSoup

aaa=3640
url1="http://bbs.ustc.edu.cn/cgi/bbstdoc?board=PieBridge&start="#赋一个URL
while aaa>0:
    aaa=aaa-20 #瀚海星云link有很简单的规律,即每页递减20,利用这个规律设置每次输入的URL,这样就爬完了PIE版所有帖子
    aaa1=str(aaa)
    url11=url1+aaa1
    fp=urllib2.urlopen(url11) #打开此URL
    s=fp.read() #把上操作的结果读出来赋给S
    soup=BeautifulSoup(s) #用 BeautifulSoup分析s
    polist=soup.findAll('span')#找到所有tag<span>的内容
    print polist[0].contents[0] #打印出第一个tag<span>中间的内容
    
改进代码2,消除乱码

import re
import urllib2
import MySQLdb
from BeautifulSoup import BeautifulSoup


aaa=2062
url1="http://bbs.ustc.edu.cn/cgi/bbstdoc?board=PieBridge&start="
while aaa>0:
    aaa=aaa-20
    aaa1=str(aaa)
    url11=url1+aaa1
    fp=urllib2.urlopen(url11)
    try:
        s=fp.read().decode("gb3212","ignore")#把gb2312修改成网页的编码
        #在这里添加一行代码,修改网页内容S的编码设置
        s=re.sub("charset=gb2312","charst=utf-8",s,re.I)
        s=s.encode('utf-8','ignore')
    except:
        s=fp.read()
    soup=BeautifulSoup(s)
    polist=soup.findAll('span')
    print polist[0].contents[0]
        

 出现问题:Traceback (most recent call last):  File "D:/Python27/运行示例暂存/all-PIE2-decode.py", line 22, in <module>    print polist[0].contents[0]IndexError: list index out of range——列表索引超出范围!后来上网搜索,一般这种问题要么超了要么列表components[k]只是个空列表时,索引0也会报错。问题代码定位在try语句中,然后发现出现了低端问题,把gb2312写成了gb3212,修改代码: 

s=fp.read().decode("gb2312","ignore")#把gb3212修改为gb2312
问题解决。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值