python+selenium 爬取中国工业园网
import math
import re import requests from lxml import etree type = "https://www.cnrepark.com/gyy/park{}/"
urlList = []
for i in range(1,8):
url = type.format(i)
urlList.append(url) from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
br = webdriver.Chrome(chrome_options=options) class ChanyeList(object): User_Agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
Refer = "https://www.cnrepark.com" # 初始化
def __init__(self,br):
self.br = br # 使用selenium下载内容
def selenium_download(self,url):
br.get(url)
content = self.br.page_source
return content def get_total_numbers(self,url):
content = self.selenium_download(url)
html = etree.HTML(content)
totalNumbersTxt = html.xpath('.//div[@class="nw_num"]/text()')
import re
totalNumbers = re.findall(r'\d+',totalNumbersTxt[0])
return totalNumbers[0]
# 解析出列表
def html_parse_list(self,content):
html = etree.HTML(content)
listObj = html.xpath('.//div[@class="area"]//div[@class="con_lst"]')
list = []
for item in listObj:
src = item.xpath('./div/a/img/@src')
href = item.xpath('./div//h2/a/@href')
title = item.xpath('./div//h2/a/text()')
list.append({'title':title[0],'href':href[0],"src":src[0]})
return list def optimizeContent(self,res):
res = res.replace('b\'', '')
res = res.replace('\\n', '')
res = res.replace('\'', '')
return res # 解析出详情
def html_parse_detail(self,content):
html = etree.HTML(content)
detail = html.xpath('.//div[@class="right_nr"]/div[1]//div[@class="kfq_box"]/ul')
detail = etree.tostring(detail[0])
detail = self.optimizeContent(str(detail)) # 区域优势
regionalAdvantages = html.xpath('.//div[@id="tbc_81"]')
regionalAdvantages = etree.tostring(regionalAdvantages[0])
regionalAdvantages = self.optimizeContent(str(regionalAdvantages)) # 基础配套
basicConfiguration = html.xpath('.//div[@id="tbc_82"]')
basicConfiguration = etree.tostring(basicConfiguration[0])
basicConfiguration = self.optimizeContent(str(basicConfiguration)) # 优惠政策
preferentialPolicy = html.xpath('.//div[@id="tbc_83"]')
preferentialPolicy = etree.tostring(preferentialPolicy[0])
preferentialPolicy = self.optimizeContent(str(preferentialPolicy)) # 规划建设
planningInformation = html.xpath('.//div[@id="tbc_84"]')
planningInformation = etree.tostring(planningInformation[0])
planningInformation = self.optimizeContent(str(planningInformation)) res = {'detail': detail,
"regionalAdvantages": regionalAdvantages,
"basicConfiguration": basicConfiguration,
"preferentialPolicy": preferentialPolicy,
"planningInformation": planningInformation,
} return res; def crawl_url(self,url):
print("crawl page {}".format(url))
listContent = self.selenium_download(url)
list = self.html_parse_list(listContent)
return list def get_name(self,index):
nameList = [
"特色园区",
"创意园",
"孵化基地",
"商务园区",
"生态园区",
"综合乐园",
"产业园转移区"
]
return nameList[index] # 保存list 获取到详情 保存为html
def save_list(self,list,type_index):
try:
for item in list:
url = item['href']
print("crawl url :"+url)
content = self.selenium_download(url)
detailList = self.html_parse_detail(content)
item['title'] = self.validateTitle(item['title'])
type_name = self.get_name(type_index)
with open("./txt/"+type_name+"-"+item['title']+".html","w") as f:
f.write("<h2>{}</h2>".format(item['title']))
f.write("<div> <a href='{}'><img style='height:80px;height:80px;' src={} /></a></div>".format(item['href'],item['src']))
f.write("<p>{}</p>".format(detailList['detail']))
f.write("<p>{}</p><h3>区位优势:</h3>{}".format(detailList['detail'],detailList['regionalAdvantages']))
f.write("<p>{}</p><h3>基础配套:</h3>{}".format(detailList['detail'],detailList['basicConfiguration']))
f.write("<p>{}</p><h3>优惠政策:</h3>{}".format(detailList['detail'],detailList['preferentialPolicy']))
f.write("<p>{}</p><h3>规划建设:</h3>{}".format(detailList['detail'],detailList['planningInformation']))
f.write("<br>")
f.close()
except Exception as e:
print("Exception:"+str(e))
def validateTitle(self,title):
rstr = r"[\/\\\:\*\?\"\<\>\|\(\)]" # '/ \ : * ? " < > |'
new_title = re.sub(rstr, "_", title) # 替换为下划线
return new_title
if __name__ == "__main__":
try: rootUrl = "https://www.cnrepark.com/gyy/park{}/" for k in range(1,8):
chanyeList = ChanyeList(br)
baseUrl = "https://www.cnrepark.com/gyy/park"+str(k)+"/?publishtime=desc&page={}"
pageUrl = "https://www.cnrepark.com/gyy/park"+str(k)+"/"
# 获取总页数
totalNumbers = chanyeList.get_total_numbers(pageUrl)
totalPage = math.ceil( int(totalNumbers) / 13)
result = []
for page in range(1,int(totalPage) + 1 ):
realUrl = baseUrl.format(page)
list = chanyeList.crawl_url(realUrl)
result.extend(list)
chanyeList.save_list(result,k-1) br.quit()
except Exception as e:
print(str(e))
python+selenium 爬取中国工业园网的更多相关文章
- Python爬取中国天气网
Python爬取中国天气网 基于requests库制作的爬虫. 使用方法:打开终端输入 “python3 weather.py 北京(或你所在的城市)" 程序正常运行需要在同文件夹下加入一个 ...
- 初识python 之 爬虫:爬取中国天气网数据
用到模块: 获取网页并解析:import requests,html5lib from bs4 import BeautifulSoup 使用pyecharts的Bar可视化工具"绘制图表& ...
- Python+Selenium爬取动态加载页面(1)
注: 最近有一小任务,需要收集水质和水雨信息,找了两个网站:国家地表水水质自动监测实时数据发布系统和全国水雨情网.由于这两个网站的数据都是动态加载出来的,所以我用了Selenium来完成我的数据获取. ...
- selenium爬取煎蛋网
selenium爬取煎蛋网 直接上代码 from selenium import webdriver from selenium.webdriver.support.ui import WebDriv ...
- Python+Selenium爬取动态加载页面(2)
注: 上一篇<Python+Selenium爬取动态加载页面(1)>讲了基本地如何获取动态页面的数据,这里再讲一个稍微复杂一点的数据获取全国水雨情网.数据的获取过程跟人手动获取过程类似,所 ...
- Python Scrapy 爬取煎蛋网妹子图实例(一)
前面介绍了爬虫框架的一个实例,那个比较简单,这里在介绍一个实例 爬取 煎蛋网 妹子图,遗憾的是 上周煎蛋网还有妹子图了,但是这周妹子图变成了 随手拍, 不过没关系,我们爬图的目的是为了加强实战应用,管 ...
- Python爬取中国票房网所有电影片名和演员名字,爬取齐鲁网大陆所有电视剧名称
爬取CBO中国票房网所有电影片名和演员名字 # -*- coding: utf-8 -*- # 爬取CBO中国票房网所有电影片名 import json import requests import ...
- python爬取中国知网部分论文信息
爬取指定主题的论文,并以相关度排序. #!/usr/bin/python3 # -*- coding: utf-8 -*- import requests import linecache impor ...
- scrapy实例:爬取中国天气网
1.创建项目 在你存放项目的目录下,按shift+鼠标右键打开命令行,输入命令创建项目: PS F:\ScrapyProject> scrapy startproject weather # w ...
随机推荐
- Django循环创造div后,对各个div操作后触发事件,传递数据(Django九)
前面我用for循环创建了div,每个div中有各自的数据以及同样的布局 效果图如下:部分代码如下: 现在,我希望在点击每个div里的发表按钮时,能在js里获取{{problem.pro_id}}以及{ ...
- ios网络访问官方演示程序
官方演示程序 AppDelegate 设置缓存 NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * ...
- [06] 优化C#服务器的思路和工具的使用
优化C#服务器的思路和工具的使用 优化服务器之前, 需要先对问题的规模做合理的预估, 然后对关键的数据做采样, 做对比, 看和自己的预估是否一致, 误差大在什么地方, 是预估的不对, 还是系统实现有问 ...
- JVM七大垃圾回收器上篇Serial、ParNeW、Parallel Scavenge、 Serial Old、 Parallel Old、 CMS、 G1
GC逻辑分类 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商.不同版本的JVM来实现. 由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本. 从不同角度分析垃圾收 ...
- .NET Core开源导入导出库 Magicodes.IE 2.3发布
在2.3这一版本的更新中,我们迎来了众多的使用者.贡献者,在这个里程碑中我们也添加并修复了一些功能.对于新特点的功能我将在下面进行详细的描述,当然也欢迎更多的人可以加入进来,再或者也很期待大家来提is ...
- uniapp vue v-html,显示富文本,内容img图片超出解决办法
uniapp h5中,v-html,img图片中style=width:auto;会显示图片原来的尺寸,会超出屏幕,替换成width:100%,这样就不会超出屏幕 重要的地方,例如<img sr ...
- zabbbixs数据库常用操作
设置MariaDB数据库远程 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'admin' WITH GRANT OPTION; SEL ...
- 渗透测试之信息收集(Web安全攻防渗透测试实战指南第1章)
收集域名信息 获得对象域名之后,需要收集域名的注册信息,包括该域名的DNS服务器信息和注册人的联系方式等. whois查询 对于中小型站点而言,域名所有人往往就是管理员,因此得到注册人的姓名和邮箱信息 ...
- Kafka日志段读写分析
引子 之所以写这篇文章是因为之前面试时候被面试官问到(倒)了,面试官说:"你说你对Kafka比较熟?看过源码? 那说说kafka日志段如何读写的吧?" 我心里默默的说了句 &quo ...
- 开源两个spring api项目
开源两个spring api项目 转载请注明出处: https://www.cnblogs.com/funnyzpc/p/13762616.html 工作也有五年有余了,中间一直迫于时间或能力没从零开 ...