使用firebug寻找手机列表在html中的定位:
图中圈中的每一个标签对应手机列表中的一部手机。打开网页的源代码中去找相同位置的内容,结果发现
在id为main的标签内,内容为空!所以我们直接download这个html的话是无法从中直接抽取想要的手机信息的。产生这种现象的原因应该是淘宝使用了ajax技术,这导致网页中的数据是使用JavaScript动态加载的,如果要抓取该数据需要使用逆向工程。
方法步骤:
手机搜索结果页面右键鼠标选择“查看元素”(firebug),选择“网络”,清空当前页面下所有数据,点击手机搜索页面的“搜索”按键,然后firebug中看到有数据获取结果:
现在可以开始编码了:
编码语言:Python3.5
开发环境:pycharm
code_version_1:
def downloader(url):
user_agent = ‘Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19’
headers = {‘User-agent’:user_agent}
req = Request(url, headers = headers)
try:
html = urlopen(url).read().decode()
except error.URLError as e:
html = None
if hasattr(e, ‘reason’):
print(‘we failed reach to a webserver’)
print(e.reason)
if hasattr(e, ‘code’):
print(‘the server could not fullfill the request’)
print(e.code)
返回的html非常繁杂,需要点耐心分析其中的数据结构,我使用了更简洁的re。
tips:
使用python3.5 download下来的html,显示为unicoe编码格式,为方便查看使其变回汉字格式,方法:
import html
html.unescape(h.decode()) #h为download的html