穷游焦作周边之大沙河

  • 题记
    本人是河南理工大学的一名大三的学生,学习的计算机转专业,来焦作已经有三年了。因为兴趣,参加了学院的ACM协会(现在称为算法工作室),我有三大兴趣爱好,敲代码,骑行,摄影。在闲暇之余,回来一场说走就走的骑行(当然是在焦作周边哈),很多时候没有规划,跑到什么地方是什么地方,这样做的勇气是有手机啊,回不去就直接导航回去了。所以各位出去游玩的时候一定要保持手机有电!大一大二的时候焦作周边基本玩的差不多了。转眼都到大三了,突然想写点东西,于是我决定,接下来的一年再次游焦作周边,写下骑行日记,希望给学弟学妹们一点游玩指导(便宜的实惠的穷游),每次骑行基本都是我一人出去,也期望有志同道合的骑友。对了,我有一辆二手的山地车,经朋友介绍收购的,因为我对山地车也有点研究,感觉不错,350左右就收下了,它就是我的坐骑。说到这里我说下,如果你们也要买二手的车子,变速器一定要好(可以应付多种地形),还有刹车(安全保证)。
  • 第一站 -大沙河
    先放图感受一下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    河两边景色都不错的。如果你有时间的话,可以沿着大沙河边可以一直往西走。一天的时间差不多够玩了。
    *** 拍摄于大沙河(理工大东门沿着山阳路一直向南走,经过一个村庄,就会看到第二张图片的过河路)。2020-9-23 ***
### 使用 Scrapy 和 Selenium 抓取穷游网数据 对于希望从像穷游网这样的现代 Web 应用程序中提取信息的任务来说,Scrapy 结合 Selenium 提供了一种强大的解决方案。由于许多旅游平台依赖 JavaScript 动态渲染内容,传统的基于静态 HTML 的爬虫工具可能会遇到困难。 #### 安装必要的库 首先安装所需的 Python 包: ```bash pip install scrapy selenium requests ``` 如果使用 Chrome 浏览器,则还需要下载对应的 WebDriver 并确保其路径已加入环境变量[^1]。 #### 创建 Scrapy 项目并配置 Selenium 中间件 初始化一个新的 Scrapy 项目结构,并创建自定义的 Downloader Middleware 来集成 Selenium: ```python import time from selenium import webdriver from scrapy.http import HtmlResponse class SeleniumMiddleware(object): def __init__(self): options = webdriver.ChromeOptions() options.add_argument('headless') # 设置无头模式运行浏览器 self.driver = webdriver.Chrome(options=options) @classmethod def from_crawler(cls, crawler): middleware = cls() crawler.signals.connect(middleware.spider_closed, signal=signals.spider_closed) return middleware def process_request(self, request, spider): self.driver.get(request.url) time.sleep(2) # 等待页面加载完成 body = str.encode(self.driver.page_source) return HtmlResponse( url=self.driver.current_url, status=200, body=body, encoding='utf-8', request=request ) def spider_closed(self): self.driver.quit() # 关闭浏览器实例 ``` 此中间件会在每次请求前启动一个隐藏版 Chromium 实例访问目标 URL ,等待几秒钟让所有 AJAX 请求结束之后再返回响应给解析函数处理[^3]。 #### 编写 Spider 类 接下来,在 Spiders 文件夹下新建 `qyer_spider.py` 文件用于定义具体的抓取逻辑: ```python import scrapy from ..items import QyerItem class QyerSpider(scrapy.Spider): name = 'qyer' allowed_domains = ['www.qyer.com'] start_urls = [ 'http://place.qyer.com/china/food/', # 可以继续添加其他分类链接... ] custom_settings = { 'DOWNLOADER_MIDDLEWARES': {'yourproject.middlewares.SeleniumMiddleware': 543}, } def parse(self, response): items = [] for sel in response.xpath('//ul[@id="list"]/li'): item = QyerItem() try: title = sel.css('.title::text').get().strip() link = sel.css('a::attr(href)').get() if not (title and link): continue item['name'] = title item['url'] = f"https:{link}" yield item except Exception as e: print(f"Parsing error {e}") next_page = response.css(".next::attr('href')") if next_page is not None: yield response.follow(next_page, callback=self.parse) ``` 这段代码遍历了每一页上的景点列表项,从中抽取名称和详情页链接作为字段保存至 Items 对象里;同时也会尝试跟进分页按钮指向的新页面重复上述操作直到最后一页为止。 #### 处理反爬机制 为了避免触发网站的安全防护措施而导致 IP 被封禁等问题发生,建议采取如下策略: - 控制并发度:降低 CONCURRENT_REQUESTS 参数值; - 添加随机延时:利用 DOWNLOAD_DELAY 或 RANDOMIZE_DOWNLOAD_DELAY 进行设置; - 更改 User-Agent 字符串:模拟不同设备类型的访问特征; - 利用代理池轮询切换出口地址。 以上方法能够有效减少被识别为自动化脚本的风险,提高成功率的同时也遵循良好的网络公民道德规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值