食品生产许可获证企业(SC)的爬取
只有名字和编号
这个网站是动态加载,并对请求ur进行了加密l
所以使用selenium
但是,selenium使用不知道为什么一旦进行了对页面数据的操作后,就无法请求到下一页的数据了,所以只能一页一页的请求不停的从第一页跳转,不能使用下一页跳转
from selenium import webdriver import pyautogui as pag from selenium.webdriver.common.keys import Keys from selenium.webdriver import ActionChains import time import pyautogui #创建浏览器对象 def find_coordinate(): """返回下一页坐标,最大页数""" #"""返回文本框坐标,go按钮位置,和最大页数 """ d = webdriver.Chrome()#可以看到浏览器界面 d.implicitly_wait(10)#隐性等待10秒如果10秒内该窗口完成渲染渲染完毕就不再等待,10秒还未渲染成功就不再等待 d.maximize_window()#窗口最大化 time.sleep(2) d.get('http://app1.sfda.gov.cn/datasearch/face3/base.jsp?tableId=120&tableName=TABLE120&title=%CA%B3%C6%B7%C9%FA%B2%FA%D0%ED%BF%C9%BB%F1%D6%A4%C6%F3%D2%B5(SC)&bcId=145275419693611287728573704379') time.sleep(3) text_location = d.find_element_by_xpath('//*[@id="goInt"]').location # 输入框所在位置 go_location = d.find_element_by_xpath('//*[@id="content"]/div/table[4]//tr/td[7]/input').location # go按钮所在位置 ma = 9595 # time.sleep(5) d.close() return text_location,go_location, ma def get_text(z1,z2,pagination): """传入文本框位置,go按钮位置,查找的页数 返回要查找的信息(公司名及代号)""" d = webdriver.Chrome()#可以看到浏览器界面 d.implicitly_wait(10)#隐性等待10秒如果10秒内该窗口完成渲染渲染完毕就不再等待,10秒还未渲染成功就不再等待 d.maximize_window()#窗口最大化 time.sleep(2) d.get('http://app1.sfda.gov.cn/datasearch/face3/base.jsp?tableId=120&tableName=TABLE120&title=%CA%B3%C6%B7%C9%FA%B2%FA%D0%ED%BF%C9%BB%F1%D6%A4%C6%F3%D2%B5(SC)&bcId=145275419693611287728573704379') # 文本框输入 pag.click(z1[0]+10 , z1[1]+10 )#点击文本框 time.sleep(1) pyautogui.hotkey('ctrl', 'a')#按下ctrl+a,全选文本框内容 pag.typewrite(str(pagination))#输入要跳转页数 time.sleep(1) pag.click(z1[0]+10+60 , z1[1]+10)#根据文本框位置定位go按钮位置并点击 time.sleep(2) node_list = d.find_elements_by_xpath('//*[@id="content"]/table[2]//tr/td/p/a') # 获取所需信息 # print(node_list) data = [] for node in node_list: t = node.get_attribute('text') print(t) data.append(t) d.close() return data def writ(data): with open('公司.txt','a',encoding='utf-8')as f: for i in data: f.write(i+'\n') def run(): z1,z2,max = find_coordinate() z1 =[z1['x'],z1['y']+110]#因为使用的是pyautogui所以定位的位置和移动的位置有偏差也就是高度偏差110左右(具体的网页具体分析,不一定都是这么高) z2 = [z2['x'], z2['y']]#z2没用到所以没用但是因为代码原因.没删 # print(z1,z2) for i in range(1,max+1): data = get_text(z1,z2,i) writ(data) if __name__ == '__main__': run()