一、确认爬取目标
爬取中国移动采购与招标网
https://b2b.10086.cn/b2b/main/listVendorNotice.html?noticeType=2
二、尝试爬取
首先我使用开发者工具,尝试看一下,数据是怎么请求回来的。
然后就发现这个,
https://b2b.10086.cn/b2b/main/listVendorNoticeResult.html?ekp1APd1=5TLUwJWxAYSUQisKAQ7GQCmzeFYm3elSTJIbLwkENOZcE12UDTYQwQlfkHI060.eBM1uON79v8qI1LO7tF7F.X8OAzNv2UJzHC3c7mIn7kdv8uXX9oYb2fnQHKnadmc5g4UxDf3gtSPSVp2dTR.8w53vDV9zEmIFvtZEfuhjtWpy76pDtYbZyrwDAQu.ajmtBgS6V_te04Npxi.z7n29IOrW0vGx69gEODHLj7SpROqNSgrRnjg6m2C10.nxiPE3Ct1Z7l9prASgIZsjvRvPA4R7qrXjxPHyOQ8qjtk5cusVz6KcLLEq1C0M.iAxh1jFaI_71dvxIVG1Y8GMkyJLRfZdMqR486Fs8hElRevldHeA&TB2MFwna=4QzPraLfz28OIFVRtGW84.C9jpMGeku7LWPoPWDJ02_xrpYWLY.c2YCWGvQsQ.mQo3bNxDkTGTAZ2HyxEen9QeI0e0MV7lT6inRUqWDy47nRYhdG0hqTjvvznYpfB1ONw8X1VE43GQXkqRolOuJW0ShZrVaqEDLjOGaewpowVguQ
根据这个可以通过分析js代码,查看参数的生成方式。使用requests.post
请求之后,发现请求失败。
改变策略,使用selenium来试试看,普通的selenium没有隐藏掉相关的信息,发现还是返回不了数据。
现在有两个方法可以解决,一是隐藏掉selenium
的信息,二是使用pyppeteer
库,这一次先使用pyppeteer
来爬取这个网站的信息。
三、使用pyppeteer
库
这个库是puppeteer
(node.js的一个库)的python版本,已经好久没更新了,之后可以使用node.js来实现,现在先使用pyppeteer
来解决这个问题。
一些基本的语法,在上一篇博客中介绍了,有兴趣的可以去看看。
下面来尝试一下
import asyncio
from pyppeteer import launch
async def main():
url = 'https://b2b.10086.cn/b2b/main/listVendorNotice.html?noticeType=2'
browser = await launch(headless=False, ignoreDefaultArgs=['--enable-automation'])
page = await browser.newPage()
await page.goto(url)
# 待提取数据
input('输入随意字符退出:'