Python 3 爬虫的自我探索(一)

0 体验一:用python抓取整个网页

Step 1 : 实现python抓取网页的代码,并运行

# encoding: UTF-8
import urllib.request

url = "http://www.baidu.com"
data = urllib.request.urlopen(url)
show = data.read().decode('UTF-8')
print(show)

Step 2 :探索当中的变量和方法,在上面的代码后加入以下代码

print("_______探索其中的data变量_______")
print(type(data))
print("_____探索其中data变量的方法_____")
print('_________________________________')
print(data.geturl())
print('_________________________________')
print(data.info())
print('_________________________________')
print(data.getcode())
print('_________________________________')

0 体验二:用python简单处理URL

Step 1 : 实现抓取百度上搜索关键词为python的网页,并运行

import urllib
import urllib.request

data = { }
data['word'] = 'python'

url_values = urllib.parse.urlencode(data)
url = "http://www.baidu.com/s?"
full_url = url + url_values

show = urllib.request.urlopen(full_url).read()
show = show.decode('UTF-8')
print(show)
  • data是一个字典,通过urlencode()方法将其转化为URL格式的字符串,此处获得了”word=python”字符串

1. Python的队列

由于list的效率问题,python官方推荐使用colleation.deque来高效的完成队列任务.

// python官方文档

from collections import deque
queue = deque(["Eric", "John", "Michael"])
queue.append("Terry")           # Terry 入队
queue.append("Graham")          # Graham 入队
queue.popleft()                 # 队首元素出队
#输出: 'Eric'
queue.popleft()                 # 队首元素出队
#输出: 'John'
queue                           # 队列中剩下的元素
#输出: deque(['Michael', 'Terry', 'Graham'])

2. Python的集合

为了不重复爬取已经爬过的网站,我们需要把爬过页面URL放入到集合,在爬下一个URL之前判断是否已经存在这个URL,然后再进行爬取

数据结构set
- 一种无序的, 不包含重复元素的结构
- (一般用来测试是否已经包含了某元素, 或者用来对众多元素们去重)
- 与数学中的集合论同样, 他支持的运算有交, 并, 差, 对称差

// python官方文档

>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)                      # 这里演示的是去重功能
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket                 # 快速判断元素是否在集合内
True
>>> 'crabgrass' in basket
False

>>> # 下面展示两个集合间的运算.
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  
{'a', 'r', 'b', 'c', 'd'}
>>> a - b                              # 集合a中包含元素
{'r', 'd', 'b'}
>>> a | b                              # 集合a或b中包含的所有元素
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b                              # 集合a和b中都包含了的元素
{'a', 'c'}
>>> a ^ b                              # 不同时包含于a和b的元素
{'r', 'd', 'b', 'm', 'z', 'l'}

3. Python的正则表达式

w3cschool 的Python正则表达式部分

发布了34 篇原创文章 · 获赞 5 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章