import re
import sys import os os.chdir('/Users/houzhixian/Desktop')#设置工作目录为桌面,可以直接将目录文件拖入终端,然后复制工作目录路径 #print(sys.path)
from selenium import webdriver#导入爬虫安装包 browser=webdriver.Chrome()#设置爬虫浏览器为chrome # browser.get('https://www.szlib.org.cn/auth/userLogin') browser.get('https://www.landchina.com/givingNotice?path=0')#用chrome浏览器自动打开爬取的网页 #2 data=browser.page_source#获得打开网页的源代码 name_p='class="hide">(.*?)</div></td>' name=re.findall(name_p,data,re.S) # 3 name_p='<div data-v-5f8a4006="" class="hide">(.*?)号.</div></td>'#提取公告名的正则表达式 name=re.findall(name_p,data,re.S)#正则表达式提取公告名,保存为name列表 # 4 data=[data]#将爬取到的网页源代码字符串转变为一个列表类型,用于后续添加循环爬取到的源代码字符串 for i in range(999):#设置点击翻页次数为999 ? ? browser.find_element_by_css_selector('#appMain > div > div:nth-child(5) > div > div.el-pagination.is-background > button.btn-next > i').click()#点击下一页 ? ? data1=browser.page_source#获得翻页后的源代码 ? ? data.append(data1)#将每一页源代码字符串添加到列表data中 # 5 # print(len(data)) data='\\'.join(data)#将data列表用‘\\’链接所有列表元素,转变为一个字符串 # 6 name_p='<div data-v-5f8a4006="" class="hide">(.*?)号.</div></td>'#提取公告名的正则表达式 name=re.findall(name_p,data,re.S)#正则表达式提取公告名,保存为name列表
for i in range(len(name)): ? ? print(str(i+1)+'.'+name[i])#循环打印每一条公告名,标明序号 name=name[0:6000] #原网页只有600页,每一页10条公告,取前6000条,后面4000条为重复爬取最后一页公告内容被删除 # 7 import docx#导入word文档创建包 土地公告名称=docx.Document()#创建word文档 for i in range(len(name)): ? ? 土地公告名称.add_paragraph(str(i+1)+'.'+name[i])#将name列表中的公告名循环写入word文档中,每条公告名单独一个段落 from docx.oxml.ns import qn#导入设置中文字体的函数 土地公告名称.styles['Normal'].font.name=u'楷体'#设置字体类型,可换成其它字体 土地公告名称.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'),u'楷体')#可换成其它字体,必须先设置上一句 土地公告名称.save('土地公告名称.docx')#保存文档到设定的工作目录文件夹中 ? ??
|