Python3.5 抓取动态网页(1)

最近接到一个朋友的需求,说需要把运单的记录保存下载,因为每个月有上千单快递,手动去复制内容的话,以免跟快递公司有争议的时候,可以做个证明。

我的思路:

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的方式得到的内容



 
 我们将

  1. Request URL:
    http://.../bills/(运单号)/routes?app=bill&lang=sc&region=cn&translate=
  2. 拷贝到地址栏



 说明我们通过这个链接就可以取到我们想要的动态内容。

4、真正的信息源已经被抓到,剩下的就是用Python处理这些页面上的字符了。

5、将单号当做参数传入,得到动态信息后,根据正则将html内容去除,就得到一个json串,然后我们将其当字符串处理即可

def gethtml(waybill=''):
    req = urllib.request.Request(
        'http://www.。。。/service/bills/' + waybill + '/routes?app=bill&lang=sc&region=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

 

如此已经搞定了我们整个需求中最关键的一步。

猜你喜欢

转载自colorpanda.iteye.com/blog/2308639