Python爬虫与一汽项目【三】爬取中国五矿集团采购平台

网站地址:http://ec.mcc.com.cn/b2b/web/two/indexinfoAction.do?actionType=showMoreCgxx&xxposition=cgxx

本来以为这是个老老实实的get请求,谁知道在翻页的时候发现提交请求的方式是post,

好在首页用get方式可以轻松获取到html源码,没有像之前的东方电气那么烦人。

在这里采用了简单的post提交方式,因此观察翻页即可发现,页面的改变和FormData有关

通过更改formdata中的currpage即可实现翻页提交。

使用post方式时,数据放在data或者body中,不能放在url中,放在url中将被忽略。

urllib2用一个Request对象来映射所提出的HTTP请求。

通过请求的地址创建一个Request对象,

通过调用urlopen并传入Request对象,将返回一个相关请求response对象,

这个应答对象如同一个文件对象,所以要在Response中调用.read()

def get_one_page(url,data):

    try:

        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'
        }
        #将传过来的data进行编码,变成bytes格式的数据
        dataEncode = urllib.parse.urlencode(data).encode('utf-8')
        #获取网页响应内容,用到了urllib模块
        request = urllib.request.Request(url=url, headers=headers,data=dataEncode)
        response = urllib.request.urlopen(request)
        #获取应答对象
        return response.read().decode('utf-8')
    except RequestException:
        return None

  主方法中构造data

def main():

    url = "http://ec.mcc.com.cn/b2b/web/two/indexinfoAction.do?actionType=showMoreCgxx&xxposition=cgxx"
    #构造post表单所提交的数据
    data = {
        'currpage': 1,
        'xxposition': 'cgxx'
    }
    html = get_one_page(url,data)
    print(html)

  

接下来可以通过循环构造最大页数,并将最大页传给data,循环获取每一页的内容即可。

#直接修改data的value值即可
    for i in range(2,page_num+1):
        data['currpage'] = i

  

posted @ 2019-04-09 15:46  bep_code  阅读(766)  评论(0编辑  收藏  举报