python爬虫之初体验

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python爬虫之初体验相关的知识,希望对你有一定的参考价值。

上网简单看了几篇博客
自己试了试简单的爬虫
哎呦喂
很有感觉
蛮好玩的

之前写博客 有点感觉是在写教程啊什么的
写的很别扭
各种复制粘贴
写得很不舒服

以后还是怎么舒服怎么写
把每天的练习
所得
写上来就好了
本来就是个菜鸟
不断学习
不断debug就好


直接上程序:

 1 # -*- coding: utf-8 -*-
 2 import urllib2
 3 import urllib
 4 import re
 5 
 6   
 7 #正则表达式
 8 pat = re.compile(img.*?id="bigImg".*?src="(.*?)")
 9 patnext = re.compile(nextPic.*?"(.*?)",)
10 pattotal = re.compile(picTotal.*?(\\d*),)
11 patnum = re.compile(picNum.*?(\\d*),)
12 patnextgroup = re.compile(nextGroup.*?"(.*?)",)
13 
14 #URL
15 nexturl = "http://desk.zol.com.cn"
16 SerialNumber = ["/bizhi/6195_76529_2.html"]
17 nexturl1 = nexturl + SerialNumber[0]
18 
19 
20 
21 #header
22 def s(nexturl2):
23     myurl = nexturl2
24     user_agent = Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)
25     values = {username : cqc,  password : XXXX }
26     headers = { User-Agent : user_agent }
27     data = urllib.urlencode(values)
28     request = urllib2.Request(myurl, data, headers)
29     myres = urllib2.urlopen(request)
30     return myres
31 
32 myres = s(nexturl1)
33 mypage = myres.read()
34 ucpage = mypage.decode("gbk") #ytf-8
35 
36 
37 total = pattotal.findall(ucpage)        #当前组图总图数
38 num = patnum.findall(ucpage)            #当前编号
39 
40 
41 print u"num:"
42 max = raw_input(">>>")
43 
44 picnum = 1
45 
46 while int(picnum) <= int(max):
47 
48 
49     if int(total[0]) == int(num[0]):                        #检测是否抓取完当前组图
50         SerialNumber = patnextgroup.findall(ucpage)
51     nexturl1 = nexturl + SerialNumber[0]
52 
53     myres = s(nexturl1)
54 
55     mypage = myres.read()
56     ucpage = mypage.decode("gbk") #ytf-8
57     SerialNumber = patnext.findall(ucpage)
58 
59     total = pattotal.findall(ucpage)
60     num = patnum.findall(ucpage)
61 
62     mat = pat.findall(ucpage)
63 
64     if len(mat) :
65         print "Pic " + str(picnum) +  "  : Url: " + mat[0] + "\\n"
66 
67         fnp = re.compile((\\w{6}\\.\\w+)$)
68         fnr = fnp.findall(mat[0])
69         if fnr:
70             fname = fnr[0]                      #下载给的文件名
71             urllib.urlretrieve(mat[0], fname)   #下载
72         picnum+=1
73 
74     else:
75         print "no data"
76      
77 print u"\\n\\tDone"

 

程序抓取的是 http://desk.zol.com.cn/bizhi/6262_77251_2.html 的图片

抓取完一张 

就申请进入下一页继续抓取

 

运行结果:

技术分享

 

技术分享

 

 

收获:

1.html js 不熟悉

2.可以通过找URL直接的规律 找下一页的URL

3.查了些资料 发现很多东西都可以学 html js beautiful soup等

4.还没习惯用try 语句

5.多练多学多问

6,urllib.urlretrieve() mypage.decode("gbk")

遇到的困难:

1.一开始不知道下一页的链接在哪 找了很久才找到 但方法不对 不知道有什么好的方法 一个原因是不了解 html js

2.一开始不知道怎么“变”到下一页,所以还想着通过pymouse控制鼠标。。。。。。结果鼠标不受控制 暴力重启。。。

3.运行的时候会跳出这个问题:IOError: [Errno socket error] [Errno 10060],为什么呢?还需要设置什么?求大神帮忙解决

以上是关于python爬虫之初体验的主要内容,如果未能解决你的问题,请参考以下文章

python之初体验

python 之初体验

scrapy按顺序启动多个爬虫代码片段(python3)

Python函数之初体验

饮冰三年-人工智能-Python-37 爬虫之初窥门径

scrapy主动退出爬虫的代码片段(python3)