做网站主流软件是php吗,怎样设计一个移动网站,建一个网站的费用,python微信网站开发本期内容#xff1a;#xff08;1#xff09;爬取日本其他城市数据存入数据库#xff08;2#xff09;爬取景点评论数据 1 爬取其他城市景点数据
只爬取一个城市的数据对于做数据可视化系统可能是不够的#xff0c;因为数据样本量少嘛#xff0c;本期来爬取其他城市的景… 本期内容1爬取日本其他城市数据存入数据库2爬取景点评论数据 1 爬取其他城市景点数据
只爬取一个城市的数据对于做数据可视化系统可能是不够的因为数据样本量少嘛本期来爬取其他城市的景点数据前面四期已经打好的良好基础本期内容非常简单只需要对项目稍加修改就可以完成废话不多说let’s go。
首先改一下爬虫把城市作为一个参数比如现在改为横滨
start_urls [https://place.qyer.com/yokohama/sight/]
city 横滨
nation 日本item部分这样写:
item[city] self.city
item[nation] self.nation翻页的时候判断下100页以上的不用爬取了因为这个网站超过100页你去点下一页它也不刷新数据了 if page_number 100:break多爬一些数据后续做旅游分析系统的时候数据多一点系统做出来就好看我爬取的结果 2 爬取评论数据 爬取思路
之前爬取的数据字段里有个comment_url 就是为了爬取评论数据作的准备通过这个字段就可以爬取每个景点的用户评论例如东京迪士尼景区的用户评论是在这个地址https://place.qyer.com/poi/V2EJalFnBzRTbQ/review/
通过浏览器的开发者模式可以大致如何爬取这个页面其他也类似于景区列表这个页面也是通过翻页来加载数据的。
下面用一张图来展示爬取流程 首先需要遍历tb_tour表的comment_url字段循环中去读取每个景点的评论页面 而爬取评论页面的过程中需要翻页这里面也涉及一个循环爬取每页都会去调用一次pipeline进行数据的存储。
这次我们会有两个地方去读取mysql数据库一个是爬虫二是管道部分因此先优化一下数据库的配置把链接信息写到settings.py里 DB_HOST localhost
DB_USER ******
DB_PASS ******
DB_DATABASE scrapy_demo
DB_CHARSET utf83 编写评论爬虫 初始化部分
首先新建一个爬虫QyCommentSpider 整个整体的思路和之前爬取景点的类似不同之处在于启动的Url需要从数据库里去获取另外需要一个专门的管道了处理数据。先编写部分爬虫
class QyCommentSpider(scrapy.Spider):name cmtcustom_settings {ITEM_PIPELINES: {tutorial2.pipelines.TourCommentPipeline: 300}}def __init__(self, *args, **kwargs):super(QyCommentSpider, self).__init__(*args, **kwargs)options webdriver.ChromeOptions()# 这行代码是用于设置 Chrome 浏览器的选项。--headless 参数表示以无头模式(无 GUI 界面)运行 Chrome 浏览器。# 无头模式下,浏览器运行在后台,不会显示任何图形界面,从而能够提高爬取效率和性能。这在服务器环境中非常有用,因为服务器通常没有图形界面。options.add_argument(--headless)LOGGER.setLevel(logging.WARNING)# 这行代码是用于指定 ChromeDriver 的路径。ChromeDriver 是 Selenium 用于控制 Chrome 浏览器的驱动程序。service Service(/usr/local/bin/chromedriver)self.driver webdriver.Chrome(optionsoptions, serviceservice) # 替换为 ChromeDriver 的实际路径def start_requests(self):# 连接 MySQL 数据库db pymysql.connect(hostself.settings.get(DB_HOST),userself.settings.get(DB_USER),passwordself.settings.get(DB_PASS),databaseself.settings.get(DB_DATABASE),charsetself.settings.get(DB_CHARSET))cursor db.cursor()cursor.execute(SELECT comment_url, id FROM tb_tour)start_urls cursor.fetchall()cursor.close()db.close()for url in start_urls:yield scrapy.Request(urlurl[0], callbackself.parse,meta{tid: url[1]})4 编写item 和 管道
class TourCommentItem(scrapy.Item):tid scrapy.Field()username scrapy.Field()avatar scrapy.Field()comments scrapy.Field()# 保存mysql 景点评论
class TourCommentPipeline:def process_item(self, item, spider):pass在settings里也增加下新的管道
ITEM_PIPELINES {tutorial2.pipelines.TourPipeline: 300,tutorial2.pipelines.TourCommentPipeline: 301,
}5 开启debug
之前我们一直是用命令行来跑scrapy 的可以在scrapy.cfg同级目录建一个run.py文件
# -*- coding:utf-8 -*-
from scrapy import cmdline
# cmt 对应的是爬虫名
# 在cmd运行 scrapy crawl cmt 同步
cmdline.execute(scrapy crawl cmt.split())pycharm去执行这个文件就可以debug运行了。
爬取结果