(一)中主要内容:
python3中:urllib.request.urlopen()打开指定url;
urllib.parse.uelencode()对普通字符串转成符合url的字符串
urlencode()编码:对字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。
urldecode()解码:还原 URL 编码字符串。
爬虫是如何工作的。
以合肥工业大学首页地址http://news.hfut.edu.cn/为例:
看首页所有链接里的内容,然后爬到了工大要闻这一个链接上面,已经完成了两页面的爬取,通过(一)方法分析url数据,即可提取有效内容。接下来,有一个返回首页的链接,是不用爬回去的,因为已经看过了这个链接。所以,要存下已经看过的链接,这样,灭此看到一个可能需要爬的新链接,就先看看存下的链接有没有重复的,如果有,那就不用去爬了。理论上,如果所有的页面都能爬到。在python里,用伪代码这样实现。
importQueue
url_queue= Queue.Queue()
seen =set()
start_page= 'http://www.hfut.edu.cn/ch/'
seen.insert(start_page)
url_queue.put(start_page)
while(True):
if url_queue.size()>0:
current_url = url_queue.get() #取出队列里面第一个url
store(current_url) #存储url网页
for next_url in extract_urls(current_url):
#extract_urls(current_url)是指页面T中所有url的集合, current_url是这个集合中的一个元素
if next_url not in seen:
seen.put(next_url)
url.Queue(next_url)
else:
break
实例代码:
# -*-coding: utf-8 -*-
importurllib.request
importurllib
fromcollections import deque
importre
q =deque()
s =set()
start_url= 'http://news.dbanotes.net'
data =urllib.request.urlopen(start_url).read().decode('utf-8')
r =re.compile(r'target.+?href="(.+?)"')
fori_url in r.findall(data):
s.add(i_url)
if i_url not in s:
d.append(i_url) #如果不在set集合中,说明还未访问,加入队列进行下一步访问。
print(s)
上述代码将 http://news.dbanotes.ne 页面的主要文章链接加入了set(防止重复),加入队列(进行下一步访问),如果想对文章内容进一步了解,可对队列中每一个url进行处理即可。
总结:这次主要是爬虫的工作原理,以及set,deque的基本操作,最重要的是有关正则表达式的了解。