爬取某网站景区列表并保存为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 [分页]:参考前文 ...
随机推荐
- UVA 12683 Odd and Even Zeroes(数学—找规律)
Time Limit: 1000 MS In mathematics, the factorial of a positive integer number n is written as n! an ...
- 【iOS开发系列】NSObject方法介绍
NSObject是OC中的基类,全部类都继承于此,这里面也给我们提供了非常多与"类"和"方法"相关的方法,本文将解说几个非常有用的方法. 正文: Person. ...
- MFC的UI更新机制和加速键的创建
近期在看<MFC Windows程序设计>这本书,正好看到更新菜单中的菜单项和加入菜单项的加速键这方面的内容,下面总一下总结. MFC提供的更新菜单项的机制例如以下: 通过消息映射表中的O ...
- JS基础之开篇
JavaScript是解释型语言,无需编译就可以随时运行,这样哪怕语法有错误,没有语法错误的部分还是能正确运行. 1.JavaScript能做什么? 01, javaScript可以进行表单验证 如果 ...
- maven工程读取resource下配置文件
maven工程读取resource下配置文件 在maven工程中,我们会将配置文件放到,src/main/resources 下面,例如 我们需要确认resource 下的文件 编译之后存放的位置 ...
- gcd&&exgcd&&斐蜀定理
gcd就是求a和b最大公约数,一般方法就是递推.不多说,上代码. 一.迭代法 int gcd(int m, int n) { ) { int c = n % m; n = m; m = c; } re ...
- linux下如何使用sftp命令进行文件上传和下载
sftp 是一个交互式文件传输程式.它类似于 ftp, 但它进行加密传输,比FTP有更高的安全性.下边就简单介绍一下如何远程连接主机,进行文件的上传和下载,以及一些相关操作. 举例,如远程主机的 IP ...
- Python27天 反射 ,isinstance与ssubclass 内置方法
所学内容 反射 1.hasattr ( 判断一个属性在对象里有没有 ) -------------------- [对象,字符串属性]本质是:# 判断 ' name ' in obj.__dict__ ...
- El表达式日期处理
第1步:引入指令 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt " %&g ...
- Windows<小白>详细笔记
Windows 7 部署 =========================================== ========================================== ...