最近接到一个朋友的需求,说需要把运单的记录保存下载,因为每个月有上千单快递,手动去复制内容的话,以免跟快递公司有争议的时候,可以做个证明。
我的思路:
1、如何获取动态网页的内容;
2、输入参数肯定有运单号,那就需要从excel中将运单号读取并将其作为参数取网页内容;
3、得到信息后,处理为网页显示的内容;
4、将信息存入到excel。

1、我想着Python实现常规的静态网页抓取,往往是用urllib来获取整个HTML页面,然后从HTML文件中逐字查找对应的关键字
import urllib.request
req = urllib.request.Request('http://python.org/')
response = urllib.request.urlopen(req)
the_page = response.read()
然后我们抓取到的网页是没有动态信息的,因为信息是通过js动态填充到网页的。
2、打开Chrome浏览器,利用Chrome的“开发者工具”来寻找谁是真正的内容提供者,按下键盘F12即可呼出此工具;
3、此时选中“Network”标签,在地址栏中输入此页面“http://www.*.com/cn/sc/dynamic_functions/waybill/#search/bill-number/运单号”,浏览器会分析出此次响应的全过程,而红框内的文件,就是此次响应中,浏览器和web后端的所有通信。

下面是网页的分析过程

然后我们根据每个请求去找到我们想要的信息,如下

接着,我们切换到Header页面,看到了么,是通过Get的方式得到的内容

我们将

说明我们通过这个链接就可以取到我们想要的动态内容。
4、真正的信息源已经被抓到,剩下的就是用Python处理这些页面上的字符了。
5、将单号当做参数传入,得到动态信息后,根据正则将html内容去除,就得到一个json串,然后我们将其当字符串处理即可
def gethtml(waybill=''):
req = urllib.request.Request(
'http://www.。。。/service/bills/' + waybill + '/routes?app=bill&lang=sc®ion=cn&translate=')
response = urllib.request.urlopen(req)
the_page = response.read().decode("utf8")
dr = re.compile(r'<[^>]+>', re.S)
data = dr.sub('', the_page)
strinfo = re.compile('"')
rs = strinfo.sub('', data)
return rs
如此已经搞定了我们整个需求中最关键的一步。
本文介绍了一种使用Python批量抓取动态网页上运单信息的方法,通过分析网页请求和响应过程,提取所需数据,并将结果存储为Excel格式。
236

被折叠的 条评论
为什么被折叠?



