爬取某网站景区列表并保存为csv文件
网址:http://www.halehuo.com/jingqu.html
经过查看可以发现,该景区页面没有分页,不停的往下拉,页面会进行刷新显示后面的景区信息
通过使用浏览器调试器,发现该网站使用的是post请求,使用ajax传输数据

请求参数:

响应数据:



经过以上分析,大致思路如下:
(1)向请求网站使用post方式传递参数,先传递首页参数,获得json数据,然后进行数据提取,获取所需要的数据
(2)使用for循环遍历获取数据
需要注意的地方:
(1)景区logo图片获取的是相对地址,通过构造一个函数获得景区logo的绝对地址
(2)获取到的景区详情链接打不开,通过景区列表页面打开景区详情页面,发现获取的景区详情链接跟景区详情页面链接不匹配再构造一个函数处理获取到的景区详情链接
#!/usr/bin/env python
# -*- coding: utf-8 -*- import csv
import json
from urllib.parse import urlencode import requests # 构造参数,发起请求,获得数据
def get_page_index(pageindex):
data = {
'citycode': 0,
'countycode': 0,
'keywords': 0,
'pageindex': pageindex,
'sceniclev': 0,
'themetype': 0,
}
params = urlencode(data)
base = 'http://www.halehuo.com/index.php/Scenic/getScenicList'
url = base + '?' + params
try:
response = requests.get(url)
if response.status_code == 200:
return response.text
return None
except ConnectionError:
print('Error occurred')
return None # 处理景区logo地址
def get_log_url(url):
base_url = 'http://www.halehuo.com'
return base_url + url # 处理景区详情链接
def get_detail_url(url):
return url.replace('index.php/Scenic/main/id', 'jingqu') # 解析获得的景区数据
def parse_page_index(pageindex):
item = get_page_index(pageindex)
items = json.loads(item)['data']
for item in items:
yield {
'id': item['id'],
'scenic_name': item['scenic_name'],
'logo': get_log_url(item['logo']),
'address': item['address'],
'policy': item['policy'],
'url': get_detail_url(item['url']),
'remarks': item['remarks']
} # 数据存储到csv
def write_to_file3(item):
with open('jingqu_detail.csv', 'a', encoding='utf_8_sig', newline='') as f:
# 'a'为追加模式(添加)
# utf_8_sig格式导出csv不乱码
fieldnames = ['id', 'scenic_name', 'logo', 'address', 'policy', 'url', 'remarks']
w = csv.DictWriter(f, fieldnames=fieldnames)
# w.writeheader()
# print(item)
w.writerow(item) def main():
for i in range(1, 13):
items = parse_page_index(i)
for item in items:
write_to_file3(item) if __name__ == '__main__':
main()
保存到csv文件的截图如下:

爬取某网站景区列表并保存为csv文件的更多相关文章
- python爬取某个网站的图片并保存到本地
python爬取某个网站的图片并保存到本地 #coding:utf- import urllib import re import sys reload(sys) sys.setdefaultenco ...
- 爬取拉勾网python工程师的岗位信息并生成csv文件
转载自:https://www.cnblogs.com/sui776265233/p/11146969.html 代码写得很好,但是目前只看得懂前一部分 一.爬取和分析相关依赖包 Python版本: ...
- scrapy框架来爬取壁纸网站并将图片下载到本地文件中
首先需要确定要爬取的内容,所以第一步就应该是要确定要爬的字段: 首先去items中确定要爬的内容 class MeizhuoItem(scrapy.Item): # define the fields ...
- 使用Python爬取微信公众号文章并保存为PDF文件(解决图片不显示的问题)
前言 第一次写博客,主要内容是爬取微信公众号的文章,将文章以PDF格式保存在本地. 爬取微信公众号文章(使用wechatsogou) 1.安装 pip install wechatsogou --up ...
- python爬取视频网站m3u8视频,下载.ts后缀文件,合并成整视频
最近发现一些网站,可以解析各大视频网站的vip.仔细想了想,这也算是爬虫呀,爬的是视频数据. 首先选取一个视频网站,我选的是 影视大全 ,然后选择上映不久的电影 “一出好戏” . 分析页面 我用的是c ...
- 使用pandas中的raad_html函数爬取TOP500超级计算机表格数据并保存到csv文件和mysql数据库中
参考链接:https://www.makcyun.top/web_scraping_withpython2.html #!/usr/bin/env python # -*- coding: utf-8 ...
- python爬虫--爬取某网站电影信息并写入mysql数据库
书接上文,前文最后提到将爬取的电影信息写入数据库,以方便查看,今天就具体实现. 首先还是上代码: # -*- coding:utf-8 -*- import requests import re im ...
- python爬虫--爬取某网站电影下载地址
前言:因为自己还是python世界的一名小学生,还有很多路要走,所以本文以目的为向导,达到目的即可,对于那些我自己都没弄懂的原理,不做去做过多解释,以免误人子弟,大家可以网上搜索. 友情提示:本代码用 ...
- 爬虫系列2:Requests+Xpath 爬取租房网站信息
Requests+Xpath 爬取租房网站信息 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参考前文 ...
随机推荐
- ElasticSearch源码解析(五):排序(评分公式)
ElasticSearch源码解析(五):排序(评分公式) 转载自:http://blog.csdn.net/molong1208/article/details/50623948 一.目的 一个 ...
- hihocoder 1680 hiho字符串2 dp求方案数+递归
我们定义第一代hiho字符串是"hiho". 第N代hiho字符串是由第N-1代hiho字符串变化得到,规则是: h -> hio i -> hi o -> ho ...
- 软件-版本控制:VCS(版本控制系统)
ylbtech-软件-版本控制:VCS(版本控制系统) 版本控制系统(Version Control System),是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.版本控制系统 ...
- 微信公众号开发之文本消息自动回复,以及系统关注自动回复,php代码
以tshop为例 直接上代码: 企业 cc_wx_sys表为自建,存储系统消息的配置的 字段: id type key status <?php /** * tpshop * ========= ...
- ROS-URDF-活动关节
前言:介绍活动关节,并使机器人活动起来. 参考自:http://wiki.ros.org/urdf/Tutorials/Building%20a%20Movable%20Robot%20Model%2 ...
- POJ 2945 trie树
Find the Clones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7704 Accepted: 2879 Descr ...
- 通过学习Date和Calendar时写的日历
package com.etc.util; import java.util.Calendar; import java.util.Scanner; public class Calendar2 { ...
- 树莓派-基于raspistill实现定时拍照
raspistill 经过上一篇<<树莓派-安装摄像头模块>>之后 raspistill 是树莓派基于摄像头拍照命令 比如我要截取一张宽1024px,高768px,旋转180度 ...
- 【JAVA练习】- 一个逻辑题
打印 1 3 4 5 8 12 7 12 20 32 9 16 28 48 80 ..... 输入任意一个奇数,输出那一行的数据 第一种方法找到规律进行 ...
- HTML 5的基本标签
1. 文件开始标签<html> 在任何的一个HTML文件里,最先出现的HTML标签就是<html>,它用于表示该文件是以超文本标识语言(HTML)编写的.<html&g ...