인민의 웹 사이트 크롤러의 관리

인민의 웹 사이트 크롤러의 # 관리 부서

** ** 목표는 오늘 최신 카운티 관리 코드에서 관리 데이터의 사이트를 통해 크롤 링 ``` 가져 오기 요청 에서 LXML 가져 오기 etree 가져 오기 pymysql 가져 오기 를 다시 클래스 Govement (객체) : DEF __init__ (자체) : self.one_url = ' http://www.mca.gov.cn/article/sj/ ' \ ' xzqh / 2019 / ' self.headers = { ' User-- 에이전트 ' : '모질라 / 5.0 (윈도우 NT 10.0; Win64를, x64-) AppleWebKit / 537.36 (KHTML, 도마뱀 등) 크롬 / 75.0.3770.100 사파리 / 537.36 ' } self.db = pymysql.connect ( ' localhost를 ' , ' 루트 ' , ' 123456 ' , ' govdb ' , 캐릭터 세트 = ' UTF-8 ' ) self.cursor = self.db.cursor () #의 추출물 보조 페이지는 거짓 링크) (링크 DEF ) 자기 (get_false_link : #의 XPath는 : // A [클래스 = "artitlelist @ "] HTML = requests.get (URL = self.one_url 헤더 = self.headers) .content.decode ( " UTF-8 ' , ' 무시 ' ) # 解析 parse_html = etree.HTML (HTML) a_list = parse_html.xpath ( ' // A [클래스 = "artitlelist"@] ' ) 에 대한 a_list : # 표제 a.xpath = ('./@ 제목 ') [0] 표제 a.get = ( ' 제목 ' ) 의 경우 re.findall ( ' . *以上行政区划代码' , 제목, re.S) : two_false_link = ' http://www.mca.gov.cn ' + \ a.get ( ' href를 ' ) 반환 two_false_link의 #은 두 개의 실제 페이지 (새 데이터) 링크 추출 DEF (자기) get_true_link : # 가져 응답 콘텐츠 false_link = self.get_false_link () HTML = requests.get (URL = false_link, 헤더 = 는 .text self.headers) #의 인쇄 응답 내용이 실제 점프 링크를 보려면 링크는 실제와 일치 re.compile = (R & LT 패턴을 ' 에서는 window.location = .href "(. *?)" ' , re.S) real_link= Pattern.findall (HTML) [0] # 증분 크롤 달성 # real_link의 여부 버전 테이블 쿼리를 #은 최근 데이터에 더 : 파지 데이터 없다 SEL = ' * 링크 버전 = "{}"SELECT " . 형식 (real_link) self.cursor.execute (SEL) #의 링크는 이미 (데이터를 가져올 필요가 없습니다) 존재하는 경우 : self.cursor.fetchall () 인쇄 ( ' 데이터가 최신 ' ) 다른 사람 : # 첫번째 캐치 데이터 self.get_data를 (real_link) # 테이블 버전에 삽입 real_link INS의 = ' 버전 값을 삽입 (%의 S)' self.cursor.execute (INS [real_link]) self.db.commit () # 真正提取数据函数 DEF get_data (자기, real_link) : HTML = requests.get ( URL = real_link, 헤더 = self.headers ). 텍스트 # 基准의 XPath : // 그럴 [의 @ 높이 = "19"] parse_html = etree.HTML (HTML) tr_list = parse_html.xpath ( ' // 그럴 [의 @ 높이 = "19"] " ) 에 대한 TR tr_list : 코드 tr.xpath = ( './td [2] / 텍스트 () ' ) [0] 이름 = tr.xpath ( ' ./td [3] / 텍스트 () ' ) [0] 인쇄 (이름, 코드) # 主函数 DEF 본체 (자체 ) self.get_true_link () 경우 __name__ == ' __main__ ' : 스파이더 = Govement () spider.main () ``

 

추천

출처www.cnblogs.com/cxiaolong/p/11261023.html